【发布时间】:2020-07-27 02:37:10
【问题描述】:
鉴于以下都是用 react hooks 编写的:
export Parent = () => {
const [msgValue, setMsgValue] = useState();
....
return {
<>
...
<Child setMsgValue={setMsgValue}/>
...
</>
}
}
shouldSkipUpdate = (oldProps, newProps) => {
...
return true;
}
export Child = React.memo({setMsgValue} => {
return (
<>
<HeavyComponent1>
<HeavyComponent2>
<InputBox onChange={setMsgValue}>
</>
)
}, shouldSkipUpdate);
我的问题是输入框没有响应,我的调查显示每次按键,<Child>都会被执行一次,甚至shouldSkipUpdate返回true,这反过来又导致<HeavyComponent1>和<HeavyComponent2>代码被执行并导致滞后。
我做错了什么以及如何防止<HeavyComponent> 被执行?
我也对 re-render 和 the component code gets executed 有点困惑,如果能得到澄清也很高兴。
【问题讨论】:
-
我个人在钩子和函数组件方面玩了很多,从你这里的情况来看,HeavyComponents 不应该重新渲染,想知道我们是否可以在 shouldSkipUpdate 函数中看到 ...。
-
因此我对“重新渲染”感到困惑,HeavyComponents 可能不会“重新渲染”,但我可以看到其中的代码被执行...
-
您是否有意将 setMsgValue 函数作为参数传递给 Child 而不是 props 对象?
-
@rayhatfield 啊抱歉我忘了在这里输入,更新了我的问题
-
我的意思是在 Child 的定义中。
(setMsgValue) => { … }
标签: javascript reactjs