Javascript 作为函数的道具是否属于useEffect dependencyArray?
假设我有以下代码:Javascript 作为函数的道具是否属于useEffect dependencyArray?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,假设我有以下代码: const ReactFunction = ({...props}) => { useEffect(() => { props.function(props.value) }, [props.value]) return <input value={props.value} onChange={props.onChange} /> } const ReactFunctionWrapper = () => { const [value, s
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} />
}
const ReactFunction=({…props})=>{
useEffect(()=>{props.function(props.value)},[props.value])
返回
}
常量ReactFunctionWrapper=()=>{
常量[值,设置值]=设置状态(0)
常量记录器=(e)=>{console.log(e}
返回
}
function()prop是否应该也在useEffect的dependencyArray中,即使它是一个函数并且永远不会更改
依赖项数组中到底应该包含哪些内容?技术上是的。函数可以出现在
useffect
的依赖项数组中。函数指针在每次刷新时都会更改,除非您使用一些缓存功能来缓存函数,如usemo
或useCallback
function()prop是否应该位于useEffect的dependencyArray中
即使它是一个函数,永远不会改变
如果函数没有引用来自props
或state
的任何值,或者从props
或state
派生的任何其他值,只有这样,才可以安全地从useffect
钩子的依赖项数组或具有依赖项数组的任何其他钩子(例如useCa”)中省略该函数llback
如果函数使用props或state,则从依赖项数组中省略它是不安全的。您可以将函数包装在useCallback
hook中,以避免每次父组件重新呈现时创建新的函数引用
有关从useEffect的挂钩依赖项数组中省略函数可能发生的情况的详细信息,请参阅
有些函数保证不会更改,可以从依赖项数组中安全地忽略。例如:useReducer
钩子返回的dispatch
函数或useState
钩子返回的状态更新函数。如果y在useffect
hook中使用
依赖项数组中到底应该包含什么
组件作用域中参与react的数据流并在
useEffect
hook的回调函数中使用的所有内容。对于useMemo
和useCallback
hooks也是如此。react.useEffect()中的第二个参数distinct当调用效果时。当第二个参数的值更改时,React运行效果
去签出一定要将它添加到依赖项中。如果该函数没有更改,那么将其作为依赖项将不会有任何影响。但是如果它确实更改,那么您的
useffect
捕获它的新值是很重要的。只有当该函数列在依赖项数组中时才会这样做。谢谢,我想澄清一下hat useEffect中使用的所有道具和状态都应该在依赖项数组中,即使道具是函数。是的,它们应该在依赖项数组中。即使某些函数可以从依赖项数组中省略,如答案中所述,将它们添加到依赖项数组中也不会有任何伤害。