假设我有以下代码:
const ReactFunction = ({...props}) => {
useEffect(() => { props.function(props.value) }, [props.value])
return <input value={props.value} onChange={props.onChange} />
}
const ReactFunctionWrapper = () => {
const [value, setValue] = setState(0)
const logger = (e) => {console.log(e}
return <ReactFunction onChange={setValue} value={value} function={function} />
}
function((道具是否也应该在useEffect的dependencyArray中,即使它是一个函数并且永远不应该更改?
依赖数组中到底应该包含什么?
从技术上讲,是的。函数可以出现在useEffect
的依赖数组中。函数指针在每次刷新时都会更改,除非您使用某些缓存功能来缓存函数(如useMemo
或useCallback
(。
函数((道具应该在useEffect的dependencyArray中吗即使它是一个函数,永远不应该改变?
如果函数没有引用props
或state
中的任何值,或从props
或state
中派生的任何其他值,那么从useEffect
钩子的依赖数组或具有依赖数组的任何其他钩子(例如useCallback
(中省略该函数是安全的。
如果函数使用props或state,那么从依赖数组中省略它是不安全的。您可以将函数包装在useCallback
钩子中,以避免每次重新渲染父组件时都创建新的函数引用。
有关从useEffect的挂钩依赖数组中省略函数会发生什么的详细信息,请参阅从依赖列表中省略函数是否安全?
有些函数保证不会更改,并且可以安全地从依赖数组中省略。例如:useReducer
钩子返回的dispatch
函数或useState
钩子返回的状态更新函数。它们可以安全地省略,但如果将它们添加到依赖数组中(如果它们在useEffect
钩子中使用(,仍然不会造成伤害。
依赖数组中到底应该包含什么?
组件作用域中参与react的数据流并在useEffect
钩子的回调函数中使用的所有内容。useMemo
和useCallback
挂钩也是如此。
调用效果时React.useEffect()
中的第二个参数不同。当你的第二个参数的值改变时,React运行效果
结账https://youtu.be/dpw9EHDh2bM?t=3629