代码在这里:https :
//codesandbox.io/s/nw4jym4n0
export default ({ name }: Props) => {
const [counter, setCounter] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setCounter(counter + 1);
}, 1000);
return () => {
clearInterval(interval);
};
});
return <h1>{counter}</h1>;
};
问题在于每个setCounter
触发器都会重新渲染,因此间隔会重置并重新创建。由于state(counter)不断增加,因此这看起来不错,但是与其他钩子结合使用时可能冻结。
正确的方法是什么?在类组件中,使用持有间隔的实例变量很简单。
您想给一个空数组作为第二个参数,useEffect
以便该函数在初始渲染后仅运行一次。
由于闭包的工作方式,这将使counter
变量始终引用初始值。您可以改用函数版本setCounter
来始终获取正确的值。
例
const { useState, useEffect } = React;
function App() {
const [counter, setCounter] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setCounter(counter => counter + 1);
}, 1000);
return () => {
clearInterval(interval);
};
}, []);
return <h1>{counter}</h1>;
};
ReactDOM.render(
<App />,
document.getElementById('root')
);
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script>
<div id="root"></div>
我有一个组件,我在其中调用我的自定义钩子。 自定义钩子如下所示: 而我在其中使用的导致错误的组件是: 有什么想法吗?
一个组件,它呈现已填好的表单的预览,当您单击左侧的表单时,它会在右侧显示它们。 第一个handleSwitchReview向我抛出了React钩子,所呈现的钩子比上一个呈现错误时要多 第二个不是。当我控制台日志道具,例如,我得到他们4-5次时,第一个函数的视图显示,但没有第二次,第二次只显示1次在控制台日志。 尝试移动setState并在控制台中记录父组件,但这个组件是唯一一个启动了很多次并中断的
本文向大家介绍利用yarn实现一个webpack+react种子,包括了利用yarn实现一个webpack+react种子的使用技巧和注意事项,需要的朋友参考一下 一、初始化项目 首先确保你的node 版本 >=4.0.并且确保yarn可以正常工作,关于安装yarn,你可以看这里 我们先创建个空文件夹 比如yarn-react-webpack-seed,然后输入命令: yarn 如果没有安装,全程
问题内容: React Hooks useState 可以将本地状态附加到无状态功能组件,例如 我想知道执行上面两行后的本地状态对象树是什么样子? 胡克规则说了一些关于状态如何处理的事情 React依赖于Hook的调用顺序 还是局部状态根本不是对象树,而只是一个数组? 提前致谢! 问题答案: 挂钩在内部实现为队列,每个挂钩由引用下一个的节点表示。 从文档中: 每个组件都有一个内部的“内存单元”列表
但我的问题是我如何强制上面的功能组件重新呈现立即与钩子?
我发现自己处于一种奇怪的境地。我正在实现一个钩子,我无法实现我想要的。 我有这样的想法: 我的问题是函数setFoo正确执行,所以foo state是一个新的数组,但是setBar依赖于foo的状态,接收一个空数组。基本上setBar是在setFoo完成之前执行的,所以getBar函数接收一个空数组。 管理这种依赖的正确方法是什么? 谢谢F