当前位置: 首页 > 知识库问答 >
问题:

如何访问构造函数内部的状态

勾向文
2023-03-14

我想在构造函数中访问多个位置的状态值。当我在构造函数中输入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.logconsole.log(this.state)它打印未定义。

我可以毫无问题地访问例如this.props。但我无法this.stateconsole.log.

共有1个答案

广宏远
2023-03-14

无法读取构造函数中的状态。即使你可以,你的使用也不会起作用。您正在为状态指定一个对象文字表达式。在该表达式中,您使用this.state引用您在所述对象文字表达式中设置的颜色。这种循环引用是不可能的,因为在分配给This.state之前必须对整个表达式求值。

当您console.log(this)时,您可以看到state的原因是因为您记录了对组件的引用。一旦在组件上设置了状态,它将在DevTools中显示。当console.log(this.state)时,this.state在此时是未定义的,因此您将注销未定义的,而不是引用到状态对象。

还有一点:你混合了常规字符串和模板文字语法。你应该做:

`.qvt-sheet{\n background: ${this.state.colors.SheetColor} !important;\n}`
 类似资料:
  • 我一直不明白为什么我们能够从其他类调用一个类的构造函数。构造函数是一种方法,通常当试图从类中调用方法时,我们必须要么使该方法静态,这样我们就可以以 但是在构造函数的情况下,我们两者都不做。Java如何调用类的构造函数而不执行这些方法中的任何一个?我知道一个类的构造函数必须对你调用它的类可见,也就是说,如果你调用的类构造函数在不同的包中,你必须导入那个包。 那么,Java如何处理调用构造函数,而不必

  • 问题内容: 我想知道如何访问另一个函数中的一个函数。我看到了这样的代码: 那么,还有另一种方法来调用该 函数吗?我的第二个问题是,为什么在最后一行中我不打电话? 很好的解释深表感谢。 问题答案: 不,您不能直接调用它,因为它是的局部变量。 您需要使用,因为调用时返回了函数对象。要执行此功能对象,您需要 在这里您可以直接调用它,因为您可以访问它,因为它是由函数返回的。返回的对象实际上称为 闭包, 因

  • 问题内容: 码: 输出: 为什么以这种方式打印? 问题答案: 当您在运行时调用多态方法时,Java使用特殊的数据结构来决定需要调用哪个类的方法。在构造对象时,即 在执行用户提供的任何构造函数和初始化程序代码之前,都会 建立此结构。 创建时,在输入的构造函数 之前 已准备好“何时调用,则需要调用或” 的数据结构。由于此结构是为类准备的,因此即使调用代码在内部的构造函数中,它也指向。这就是为什么您看到

  • 我有两个类:Date和Person Person有Date类的两个属性 案例1 类是与Person类分开的类。我有这段代码正常工作: 案例2:内部类(赋值要求) 我把作为Person的私有内部类 现在,上面的构造函数代码不再工作了。以下是错误消息: 说明资源路径位置类型由于某些中间构造函数调用人员,类型Person的封闭实例不可用。java/Wk03_Ch10_文件IO_Ch13_接口/Wk03_

  • 我正在构建一个消息传递应用程序。我使用setTimeout每隔5秒从后端检索一次消息日志,并将其存储在一个状态变量中。我让它也滚动到聊天窗口的底部每次超时,但我试图使它只发生在有一个新的消息在响应对象。问题是我无法访问检索它的函数中的状态变量。理想情况下,我会将响应对象的长度与状态变量的当前长度进行比较,以确定是否存在新的响应。 这是我的代码: 在处理逻辑方面,我也愿意接受更好的建议。提前道谢!

  • 伊登 JLS所说的是: 设C是ClassName表示的类。设n是一个整数,使得C是类的第n个词汇封闭类,在该类中出现有条件的this表达式。 [...] 如果当前类不是类C或C本身的内部类,则为编译时错误。 在的情况下,内部类集。这意味着上面的代码应该可以正常工作。发生了什么?