【发布时间】:2019-07-07 13:39:10
【问题描述】:
我想公开我对钩子的担忧。
在使用钩子重构/重写反应库 (react-numpad) 以进行学习时,我一直坚持在关键事件上实现 eventListener。
使用类,只需在 componentDidMount 和 componentWillUnmount 生命周期中添加 addListener 即可完成。
使用KeyPress挂钩
更新回调
NumPad 组件是具有值状态的父组件
挂钩用法
Keypad 组件是作为 props 接收值并调用的子组件 更新 keydown 作为回调。如果 useEffect(在钩子内)有空数组,则此值不会更新
现在在每次渲染时添加和删除 addListener。这以前没有发生,但仅在安装或卸载组件时发生。
钩子的行为是否与使用类的行为相同?
【问题讨论】:
-
我不确定你在问什么。您是正确的,默认情况下每个渲染都会发生效果,并且您可以使用数组作为第二个参数来限制重新计算发生的时间是正确的。
-
@NicholasTower 将数组作为第二个参数,该解决方案不再有效。我想知道在这种情况下使用钩子是否会降低性能。
-
我不明白为什么你觉得你需要在每次渲染时添加或删除监听器。使用 useEffect,您可以在挂载时添加一次,并在卸载时将其删除,就像您之前所做的那样,通过将空数组作为值传递。如果您需要更频繁地运行另一种效果,则可以有多个 useEffect。
-
@Anxo,如果你仔细阅读问题描述,当我使用 useEffect 和空数组时,prop 值是不可访问的。
-
我想我现在已经理解你了。您绝对可以使用空数组从 useEffect 访问道具,但该函数不会在每次渲染时更新,因此不会更新道具。你只需要解决这个事实。我会添加一个答案。
标签: javascript reactjs react-hooks