javascript - 如何访问构造函数内部的状态
问题描述
我想在多个地方访问构造函数中的状态值。当我在构造函数中使用 console.log(this) 时,我可以看到可以访问特定值,但是当我 console.log this.state 时,我得到未定义。
这就是我想象它可以工作的方式(我想访问 CSSValue 中的状态):
constructor(props) {
super(props);
this.state = {
colors: {
SheetColor: "#FFFFFF"
},
CSSValue: '.qvt-sheet{\n background:' + $(this.state.colors.SheetColor) + '!important;\n}'
}
}
但是,当我运行此代码时:
constructor(props) {
super(props);
this.state = {
colors: {
SheetColor: "#FFFFFF"
},
CSSValue: '.qvt-sheet{\n background:' + $(console.log(this)) + '!important;\n}'
}
}
然后我在控制台中得到这个:
但是当我将 console.log 更改为 console.log(this.state) 时,它会打印 undefined。
我可以毫无问题地访问例如 this.props。但不知何故,我无法在 console.log 中访问 this.state。
解决方案
您无法在构造函数中读取状态。即使你可以,你的使用也行不通。您正在分配以声明对象文字表达式。在此表达式中,您this.state
可以引用您在所述对象文字表达式中设置的颜色。这种循环引用是不可能的,因为整个表达式必须在分配给之前进行评估this.state
。
您可以看到的原因是因为您记录了state
对组件的引用。一旦在组件上设置了状态,它将显示在 DevTools 中。当你,在这个时间点时,你将因此注销而不是对状态对象的引用。console.log(this)
console.log(this.state)
this.state
undefined
undefined
还有一点:您正在混合常规字符串和模板文字语法。你应该做:
`.qvt-sheet{\n background: ${this.state.colors.SheetColor} !important;\n}`
推荐阅读
- node.js - 如何在特定时间运行作业,然后在该时间后重复
- ios - 自定义 TableView 中的 UIView 背景颜色仅在滚动时更改,为什么?
- python - BigQuery,使用python客户端加载包含重复字段的数据框
- c# - 检查 CancellationToken 是否已被取消
- c - Lua C API - 将数据附加到协程
- html - 如何使用 Bootstrap 4 使我的布局响应
- c# - 为什么 Ajax 的 JSON 对象会抛出错误,而 json 文件不会?
- c# - 从 c# 更新图层 Autocad Map 2014
- sql - 如何将 unix 时间戳转换为带有时区的日期?
- javascript - 如何将 ajax url 参数中的变量传递给 laravel 路由?