隔江千里
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]);
添加回答
舉報
0/150
提交
取消