【发布时间】:2020-11-28 13:21:34
【问题描述】:
通常在使用 React+Typescript 编写组件时,我想在其中一个道具上触发 useEffect 挂钩。例如,假设一个按钮在每次连续鼠标点击时执行不同的功能:
export function ActionButton({clickActions}: {clickActions: (() => void)[]}) {
const [clicked, setClicked] = useState(0);
useEffect(() => {
if (clickActions.length > 0 && clickActions[clicked % clickActions.length]) {
clickActions[clicked % clickActions.length]();
}
}, [clicked, clickActions])
return <button onClick={() => setClicked(clicked => clicked + 1)}/>
}
在这种情况下,该组件的客户端需要注意,他们需要以某种方式防止 clickActions 在每次渲染时成为不同的实例。例如,它可以只是一个常量,也可以使用useMemo 来记忆。
是否有让我的客户意识到这一点的最佳做法?有没有办法在违反此规则时触发编译时错误?
注意:我意识到这种特殊情况可以在不使用useEffect 的情况下解决,但这只是一个说明模式的简单示例。我对解决这个特定问题不感兴趣,而是对如何解决一般问题感兴趣。
【问题讨论】:
标签: reactjs typescript react-hooks