【发布时间】:2019-10-15 09:11:42
【问题描述】:
React Hooks 不会更新以使用传递下来然后存储的道具。通常我会通过调用 useEffect 中的功能来解决 useState 问题,但在这种情况下,我需要在点击事件后进行更新:
const [currentLayer, setCurrentLayer] = useState();
useEffect(() => {
console.log(props.currentLayer) // props.currentLayer is defined
setCurrentLayer(props.currentLayer);
}, [props.currentLayer]);
useEffect(() => {
console.log(currentLayer); // currentLayer state is defined
}, [currentLayer]);
/*
* Called when the timeline product is clicked
*/
const clickHandler = e => {
console.log(currentLayer); // currentLayer state is undefined
currentLayer.getSource().updateParams({ TIME: e.time });
};
return <Timeline options={props.timelineOptions} items={items} clickHandler={e => clickHandler(e)} />;
当 clickHandler 被调用时,currentLayer 状态未定义,尽管之前已设置。
结合 useEffect 和 clickHandler 的最佳方式是什么,还是我错过了其他东西?
【问题讨论】:
-
请用minimal reproducible example 更新您的问题来证明问题,最好是使用堆栈片段(
[<>]工具栏按钮)可运行。 Stack Snippets 支持 React,包括 JSX; here's how to do one. -
真的需要一个工作示例来提出如何结合 useEffect 和点击处理程序的解决方案吗?
-
你为什么首先申请
props.currentLayer状态?看起来您不需要,应尽可能避免复制数据 -
我最初也是这么想的,在为这个问题创建一个工作示例时,我没有遇到同样的问题,一定是其他原因导致了问题。
-
你的逻辑很好,你需要一个可生产的例子,正如@T.J.Crowder 建议的那样,因为你得到了意想不到的行为。
标签: javascript reactjs react-hooks