javascript - 为什么我的 setInterval 在 React 应用程序中不起作用
问题描述
我是新手,我正在尝试创建一个简单的时间展示网站,用于
我尝试使用的练习,setInterval()
但它不起作用。
这是我的 App.js 文件
import React from "react";
import "./style.css";
function Clock(props) {
return (
<>
<h2>{props.date.toLocaleTimeString()}</h2>
</>
);
}
function App() {
return (
<div>
<Clock date={new Date()} />
</div>
);
}
setInterval(App, 1000); {/* setInterval(Clock, 1000) */}
export default App;
和 Index.js 文件
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
ReactDOM.render(<App />, document.getElementById("root"));
解决方案
单独调用功能组件不会做任何事情,除非您将结果元素放入一个ReactDOM.render
或另一个功能组件中。你setInterval(App, 1000);
什么都不做。
让组件自己重新渲染。
function App() {
const [date, setDate] = useState(new Date());
useEffect(() => {
setInterval(() => {
setDate(new Date());
}, 1000);
}, []);
return (
<div>
<Clock date={date} />
</div>
);
}
然后,只要状态发生变化,单次使用ReactDOM.render(<App />, document.getElementById("root"));
就会导致时钟更新。
如果您打算卸载组件,最好将间隔 ID 保存在变量中并从效果回调中返回清理函数以清除间隔。
useEffect(() => {
const intervalId = setInterval(() => {
setDate(new Date());
}, 1000);
return () => clearInterval(intervalId);
}, []);
推荐阅读
- vue.js - 使用chartJs在yAxis中标签太长
- python - 单击电报中的菜单按钮后显示文本消息
- reactjs - 使用 gatsbyjs 将来自 graphql 查询的数据修改为反应组件在 gatsby 开发中有效,但在 gatsby 构建中中断
- python-3.x - 如何解决此未知标签类型错误?
- android - 如何从列、行获取索引
- apache-kafka - Kafka的Replica处理机制?
- css - flex中的角度项目在使它们成为组件后没有固定的高度
- android-studio - 在不重启 Android Studio 的情况下刷新自定义 template.xml
- python - 如何使用 OpenCV 用一些 Python 代码拼接这两个图像?
- python - 字符串与数据库中数据的比较