반응형
자식 컴포넌트에서 부모 컴포넌트의 함수를 실행하려면 props로 함수를 넘겨주면 된다. 역방향은 불가능한가 싶어서 찾아봤더니 방법이 있었다.
부모 컴포넌트에서 자식 컴포넌트의 함수를 실행하기 위해선 React.forwardRef와 useImperativeHandle을 사용해야 한다.
// Child.jsx
import { forwardRef, useImperativeHandle } from "react";
const Child = forwardRef((props, ref) => {
useImperativeHandle(ref, () => ({
testFn: () => {
alert("함수 실행됨");
}
}));
return <div>Child</div>;
});
export default Child;
이렇게 자식 컴포넌트에서 useImperativeHandle과 forwardRef를 사용해 ref를 만들면
// Parent.jsx
import { useRef } from "react";
import Child from "./Child";
const Parent = () => {
const childRef = useRef();
return (
<button
onClick={() => childRef.current.testFn()}
>
함수 실행
</button>
<Child ref={childRef}></Child>
);
}
export default Parent;
요렇게 부모 컴포넌트에서 ref를 받아다가 사용할 수 있다.
방법도 복잡하고 리액트에서도 권장하는 패턴은 아닌 듯하다. 하긴 지금 생각해보면 useEffect로 props의 변화에 따라 함수를 실행시키는 방법으로도 충분할 거 같긴 하다.
반응형
'프로그래밍 > React' 카테고리의 다른 글
CRA 없이 React 개발환경 구축하기 (Rollup편) (0) | 2022.03.05 |
---|---|
스토리북에서 CSS Modules 사용하기 (0) | 2022.02.05 |
CRA 없이 React 개발환경 구축하기 (Parcel편) (0) | 2022.01.22 |
We no longer support global installation of Create React App 오류 해결법 (0) | 2022.01.05 |
CRA 없이 React 개발환경 구축하기 (Webpack편) (1) | 2021.12.11 |
함수형 컴포넌트에서 forceUpdate 구현 (0) | 2021.07.02 |
서브 디렉터리에서 리액트 앱 실행 문제 해결 (0) | 2021.06.12 |
아파치 웹서버에 리액트 라우터 앱 올리기 (0) | 2021.05.22 |