亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 useEffect 和其他函數調用函數

從 useEffect 和其他函數調用函數

隔江千里 2023-08-05 11:52:55
我有一個子組件,它通過事件向父組件發出操作:子組件:export default function ChildComponent(props) {  const classes = useStyles();  const [value, setValue] = React.useState([0, 5]);  const handleChange = (_, newValue) => {    setValue(newValue);    props.updateData(newValue)  };  return (    <div className={classes.root}>      <GrandSonComponent        value={value}        onChange={handleChange}      />    </div>  );}父組件:export const ParentComponent = () => {  const [loading, setLoading] = React.useState(true);  const { appData, appDispatch } = React.useContext(Context);  function fetchElements(val) {    fetchData(val);  }  // eslint-disable-next-line react-hooks/exhaustive-deps  useEffect(() => { return fetchData() }, []);  async function fetchData(params) {    const res = await axios.get('/url', { params });    appDispatch({ type: "LOAD_ELEMENTS", elements: res.data });  }  return (    <div>      <ChildComponent updateData={fetchElements}  />    <div>     .     .     .   )};我想知道如何刪除這條線// eslint-disable-next-line react-hooks/exhaustive-deps我需要添加這一行,因為否則我會看到 eslint 錯誤:React Hook useEffect has a missing dependency: 'fetchData'. Either include it or remove the dependency array.eslintreact-hooks/exhaustive-deps我需要fetchData(params)在第一次渲染頁面時使用函數,并且當用戶更改/單擊子組件的值時沒有 eslit 警告!
查看完整描述

1 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

首先,您不需要返回鉤子fetchData()內調用函數的結果useEffect。


現在談到您的問題,您收到警告的原因是因為缺少依賴項useEffect可能會因關閉而導致錯誤。React 建議不要省略鉤子useEffect、useCallback鉤子等任何依賴項。


這有時會導致狀態更新和重新渲染的無限循環,但這可以通過使用useCallback鉤子或其他可以阻止useEffect鉤子在組件每次重新渲染后執行的方法來防止。


對于您的情況,您可以按照以下步驟解決問題:


fetchData將函數包裝在useCallback鉤子中


const fetchData = useCallback(async (params) => {

   const res = await axios.get('/url', { params });

   appDispatch({ type: "LOAD_ELEMENTS", elements: res.data });

}, []);

添加到hookfetchData的依賴數組中useEffect


useEffect(() => {

    fetchData();

}, [fetchData]);


查看完整回答
反對 回復 2023-08-05
  • 1 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號