reactjs - useState 钩子的 setState 函数会触发整个组件的重新渲染还是只是返回的 JSX 部分代码?
问题描述
我是 React 的初学者,我正在从 udemy 课程中学习它。最初我认为功能组件内的整个代码在状态更新后会重新渲染/重新运行。但是后来我在重定向之前看到了倒计时的这种实现并且感到困惑。
import React, { useState, useEffect } from "react";
import { useHistory } from "react-router-dom";
const LoadingToRedirect = () => {
const [count, setCount] = useState(5);
let history = useHistory();
useEffect(() => {
const interval = setInterval(() => {
setCount((currentCount) => --currentCount);
}, 1000);
// redirect once count is equal to 0
count === 0 && history.push("/");
// cleanup
return () => clearInterval(interval);
}, [count]);
return (
<div className="container p-5 text-center">
<p>Redirecting you in {count} seconds</p>
</div>
);
};
export default LoadingToRedirect;
那么如果 setCount 触发了整个代码的重新渲染,为什么这里需要 setInterval 呢?我们不能用 setTimeout 做同样的事情吗?所以我试过了,它奏效了。他这样做肯定是有原因的吗?我错过了什么吗?
解决方案
当然 React 会重新渲染整个组件,但它也取决于一些条件。例如,如果您查看代码,您已将 count 变量作为依赖项传递给 useEffect 挂钩,这意味着如果 count 的值发生变化,React 将在 useEffect 挂钩内呈现效果。
是的,您可以使用 setTimeout 实现相同的目的;setInterval 毫无意义,因为它完全取决于您作为依赖项传递的计数变量。
如果您将 count 作为依赖项删除,那么您可以很容易地看到它不会重定向您所需的页面。
推荐阅读
- openssl - 获取 OpenSSL 的 OpenSC PKCS11 引擎日志
- c++ - 非参数化构造函数的目的是什么?
- javascript - 为什么单击按钮在 JS 中没有给出有效的文本?
- r - 如果组内全部缺失,R替换缺失值
- python - 如何在 Python 3 中打开文件?
- node.js - Mongoose 按更多属性或仅按一个属性查找产品
- c# - 小数之和得到错误答案 RDLC 报告
- xpath - XPath 按名称获取具有最高数值的元素
- python - 如何从 Spotify 获取艺术家的 URI,而无需从 Spotify 手动复制艺术家的 URI
- wordpress - 页面速度即使在 Page Speed Insight 上得分 90+ 后也不会通过