React에서 다른 Function Component에 있는 함수 호출: React Calling Function From Another Function Component
WeeklyBox에서 AfterBoxList에 있는 함수를 호출하는 방법은 없을까 찾아보다가
useImperativeHandle이라는 리액트 훅을 통해 가능한 방법을 찾았다.
Home의 자식은 WeeklyBoxList, AfterBoxList이고,
이중 WeeklyBoxList의 자식은 WeeklyBox이다.
요약하자면 다음과 같다.
Home.js
import React, {useRef} from "react";
import AfterBoxList from "../../components/Home/AfterBoxList";
import WeeklyBoxList from "../../components/Home/WeeklyBoxList";
import "./Home.css";
function Home() {
const childRef = useRef(null);
const refreshAfterBoxList = () => {
childRef.current.getAfterBoxList();
}
return <div className = "home-layout">
<div className = "home-layout__wrap">
<div className = "home-layout__wrap__left">
<WeeklyBoxList
refreshAfterBoxList = {refreshAfterBoxList}
/>
<AfterBoxList
ref = {childRef}
/>
</div>
</div>
</div>;
}
export default Home;
AfterBoxList.js
import React, { useImperativeHandle, useState, useEffect, forwardRef } from "react";
import axios from "axios";
import AfterBox from "./AfterBox";
import "./AfterBoxList.css";
export const AfterContext = React.createContext();
function AfterBoxList({accessToken, userId}, ref) {
// 첫번째 방법
useImperativeHandle(ref, () => ({
getAfterBoxList
}));
// 두번째 방법
// useImperativeHandle(ref, () => ({
// refreshAfterList: () => {
// getAfterBoxList();
// }
// }));
async function getAfterBoxList() {
// ...
};
return <div></div>;
}
export default forwardRef(AfterBoxList);
WeeklyBox.js
import React from "react";
import "./WeeklyBox.css";
function WeeklyBox({refreshAfterBoxList}) {
const onClickCompleteBtn = () => {
refreshAfterBoxList();
}
return <div className="weeklyBox">
...
</div>;
}
export default WeeklyBox;
WeeklyBoxList에서는 Home에서 받은 함수를 그대로 자식인 WeeklyBox에 넘겨주었다.
Author And Source
이 문제에 관하여(React에서 다른 Function Component에 있는 함수 호출: React Calling Function From Another Function Component), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hssarah/React에서-다른-Function-Component에-있는-함수-호출-React-Calling-Function-From-Another-Function-Component저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)