var*_*ius 12 reactjs react-hooks
随着反应钩现已我应该在功能部件的情况下,包裹用的道具通过各项功能useCallback并与其他所有的道具价值useMemo?
还应该在我的组件中具有依赖于任何props值的自定义函数,我应该使用useCallback包装它吗?
有哪些好的做法来决定使用此钩子从组件中包装哪些prop或const值?
如果这样可以提高性能,为什么不一直这样做呢?
让我们考虑在包装点击处理程序并添加自定义逻辑的自定义按钮
function ExampleCustomButton({ onClick }) {
const handleClick = useCallback(
(event) => {
if (typeof onClick === 'function') {
onClick(event);
}
// do custom stuff
},
[onClick]
);
return <Button onClick={handleClick} />;
}
Run Code Online (Sandbox Code Playgroud)
让我们考虑在包装点击处理程序并根据条件添加自定义逻辑的自定义按钮
function ExampleCustomButton({ someBool }) {
const handleClick = useCallback(
(event) => {
if (someBool) {
// do custom stuff
}
},
[someBool]
);
return <Button onClick={handleClick} />;
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我应该用useCallback包装我的处理程序吗?
与使用备忘录类似的情况。
function ExampleCustomButton({ someBool }) {
const memoizedSomeBool = useMemo(() => someBool, [someBool])
const handleClick = useCallback(
(event) => {
if (memoizedSomeBool) {
// do custom stuff
}
},
[memoizedSomeBool]
);
return <Button onClick={handleClick} />;
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,我甚至将备注值传递给useCallback。
另一种情况是,如果在组件树中许多组件记忆相同的值?这对性能有何影响?
jal*_*ooc 12
不值得,有多种原因:
放在一起-键入所有的钩子要比将它们放置在应用程序中的用户花费更多的时间。遵循良好的旧规则:先测量,然后进行优化。
我同意@jalooc提出的原则
为了提供有关OP中展示的用例的更多信息,这是我的建议:
function Component() {
const callback = useCallback(() => { dostuff }, [deps])
return <Child prop={callback} />
}
Run Code Online (Sandbox Code Playgroud)
如果Child是要渲染的非常昂贵的组件,则上述说明是有意义的。因此,它可能像这样导出:
function Child() {
...this takes significant CPU...
}
// Export as a pure component
export default React.memo(Child)
Run Code Online (Sandbox Code Playgroud)
function Component() {
const callback = useCallback(() => { dostuff }, [deps])
return <Child prop={callback} />
}
Run Code Online (Sandbox Code Playgroud)
useCallback)或将其移出范围。React.memo,请#2在必要时借助进行纯化useMemo)| 归档时间: |
|
| 查看次数: |
1843 次 |
| 最近记录: |