【发布时间】:2019-11-14 14:55:46
【问题描述】:
我正在尝试在使用 useState 挂钩时以编程方式更改状态。
我是这样定义的:
const [data, setData] = React.useState({
text: "Hello StackOverflow!",
someNumber: 2
});
出于测试目的,我创建了一个每秒增加someNumber 的间隔。
setInterval(() => {
setData({ ...data, someNumber: data.someNumber + 1 });
}, 1000);
当我现在安装组件时,文本开始以不同的数字快速闪烁。我猜 Interval 已多次启动,但我不知道为什么。这是我第一个使用新钩子的项目。
我的代码的完整示例可以找到on code sandbox snippet
如果链接断开,这里是组件:
import React from "react";
import TextField from "@material-ui/core/TextField";
export default function StateTextFields() {
const [data, setData] = React.useState({
text: "Hello StackOverflow!",
someNumber: 2
});
setTimeout(() => {
setData({ ...data, text: "How are you?" });
}, 1000);
setInterval(() => {
setData({ ...data, someNumber: data.someNumber + 1 });
}, 1000);
return (
<TextField
id="standard-name"
label="Name"
value={data.text + " " + data.someNumber}
margin="normal"
/>
);
}
【问题讨论】:
-
刚刚在您的沙箱上进行了测试。将更新功能更改为我的答案中所示时,它按预期工作
标签: reactjs material-ui