javascript - 在状态内部定义的数据和在构造函数内部创建的外部状态有什么不同?
问题描述
你能向我解释一下关于状态内部和外部状态的数据的不同之处吗:
constructor(){
this.data1 = "this is data 1",
this.state = {
this.data2 = "this is data 2"}
}
因此,如果我在 componentDidMount 或渲染函数中使用 data 2 而没有任何条件代码,它会抛出描述 React 不能允许无限循环 bla bla bla 的错误,但如果我在 componentDidMount 或渲染函数中使用 data1,它会完美运行。那么差异网络是什么?我应该使用 data1 让自己获得更多的灵活性吗?
解决方案
这是一个有效的语法
constructor(){ this.data = "this is data 1"; }
这不是有效的语法
constructor(){ this.state = { this.data = "this is data 2" } }
但是,这是有效的
constructor(){ this.state = { data: "this is data 2" } }
所以这有什么区别。
1 是有效的,但是在更改值this.data = 'Some new value'
时不会触发组件渲染,如果您在 jsx/html 中显示此值,则除非其他状态更改触发渲染功能,否则不会反映更新后的值。
3 是定义状态变量的方式,您永远不应该mutate
或直接更新状态,例如this.state.data = 'some value'
. 您需要更新this.setState({ data: 'some new value' })
将触发渲染功能的值
推荐阅读
- apache-nifi - nifi extractText 处理器问题
- reference - 生命周期不匹配 - 返回一个引用的可变变量
- java - 尝试通过 XML 文件初始化 ehcache 时出现 NoClassDefFoundError
- c - 指针在传递给某些函数后消失(即使使用 malloc)
- terraform - 未知的根级别键:locals
- maven - Ant 到 Maven 的转换
- ffmpeg - FFMPEG:RTSP 重新流随机死亡
- webpack - webpack-dev-server 构建和重建速度非常慢
- wpf - WPF中的发光效果
- sparql - SPARQL 查询以查找“著名”人物