【发布时间】:2020-10-27 20:12:41
【问题描述】:
当第二组参数传入[] 时,为什么useEffect() 会无限循环?这里的目标是仅在加载时获取props.state.hours.clockedIn 的最后一条记录的状态(仅一次),然后存储该布尔值以在其他地方使用。如果第二个参数没有props.hours 和clocked,那么useEffect 不会得到最后一条记录的值,并且始终是false(在这种特殊情况下应该是true)。如果它们被传入,我可以在 console.log 中看到 .map 函数按预期工作。这里需要使用useEffect()吗?是否有另一种方法可以在加载时仅获取最后一条记录的 clockedIn 值?
const Hours = (props) => {
const [clocked, setClocked] = useState(false);
useEffect(() => {
props.fetchHours()
.then(() => {
_.map(props.state.hours, (hour) => {
setClocked(hour.clockedIn)
console.log(clocked)
})
})
}, [props, clocked])
return (
<div></div>
);
};
【问题讨论】:
-
因为你在
useEffect中修改clocked从而触发状态更新,从而重新渲染,从而又一轮useEffect -
@ckingchris 您在
useEffect和 useEffect 中有clocked作为依赖项,您正在更改clocked变量,这将导致无限循环。您可能应该删除时钟作为依赖项 -
尝试从依赖数组中删除
console.log(clocked)
标签: javascript reactjs setstate use-effect