javascript - 为什么这个状态变量不是实时递增的?
问题描述
我正在尝试理解 react.js 并且我有以下代码:
import React, { Component } from 'react';
class App extends Component {
state = {
variable : 12,
}
state1 = () => "Hello"
state3 = {
variable3 : 1,
}
varia = () => { this.setState((old, pr) => {
return {
variable3 : old.variable3+1
}
});
}
componentDidMount(){
this.timer = setInterval(() => this.varia(), 1000);
}
componentWillUnmount(){
clearInterval(this.timer);
}
render(){
return (<>
<div>{this.state.variable}</div>
<div>{this.state3.variable3}</div>
</>);
}
}
export default App;
这段代码不起作用,而下面的代码就像一个魅力:
import React, { Component } from 'react';
class App extends Component {
state = {
variable : 12,
}
state1 = () => "Hello"
state3 = {
variable3 : 1,
}
varia = () => { this.setState((old, pr) => {
return {
variable : old.variable+1
}
});
}
componentDidMount(){
this.timer = setInterval(() => this.varia(), 1000);
}
componentWillUnmount(){
clearInterval(this.timer);
}
render(){
return (<>
<div>{this.state.variable}</div>
<div>{this.state3.variable3}</div>
</>);
}
}
export default App;
你知道为什么我在第一种情况下它不起作用吗?我的意思是我必须使用 state 而不是 state3 ?
非常感谢 !
解决方案
variable3
不存在于state
,它存在于state3
,因此当您尝试使用 访问它时variable3 : old.variable3+1
,它不是 on 的属性old
,因此您实际上是在做undefined + 1
需要注意的一点是,它state
是 React 组件中的一个特殊名称,因此您的组件会在更改时重新渲染,state
但不会在state3
更改时重新渲染。
推荐阅读
- sap-basis - SAP R/3 STMS 错误消息“与组件版本不匹配”/“Die installierte Komponenten-version stimmt nicht überein”
- javascript - 如何在不刷新网站的情况下更改 JQuery 验证消息
- python - 合并图像和 gif(反转(或蓝色)图像)discord.py 时出现问题
- python - 将元数据(注释)添加到 python 变量
- google-apps-script - GAS 库可以用作脚本模板吗?
- javascript - 带有 Video.js 的 PHP 视频源,无需先下载整个文件
- arrays - 在C中更改数组中的数字的问题
- sql - BQ:从多列中选择最新日期
- python - 将数据类型附加到 json 文件
- sql-server - MSSQL JSON 自动转 Go 结构