Javascript 在react组件中,如何在静态函数中获取'this'?

Javascript 在react组件中,如何在静态函数中获取'this'?,javascript,reactjs,this,react-jsx,Javascript,Reactjs,This,React Jsx,试图在react组件内创建静态函数。函数使用this获取其数据,但调用函数时this超出范围 下面是一个非常简单的例子: var Test = React.createClass({ val: 5, statics: { getVal: function() { return this.val } }, render: return( <div>{this.val}</div> ) }); Test.getVal(); => undefin

试图在react组件内创建
静态
函数。函数使用
this
获取其数据,但调用函数时
this
超出范围

下面是一个非常简单的例子:

var Test = React.createClass({ val: 5, statics: { getVal: function() { return this.val } }, render: return( <div>{this.val}</div> ) }); Test.getVal(); => undefined!!
啊,好吧。如果您需要在任何时候调用此方法,那么您的val也必须位于statics中,但是渲染函数必须引用Test.val而不是this.val。如果这不是一项要求,那么最好坚持使用道具/状态,并从组件内部访问内容,因为组件不会根据val的更改自动更新

var Test = React.createClass({
  statics: {
    val: 5,
    getVal: function() { 
        return this.val
    }
  },
  render: function(){
      return( <div>{Test.val}</div> )
  }
});

console.log('VAL IS' , Test.getVal());
var Test=React.createClass({
静力学:{
瓦尔:5,
getVal:函数(){
把这个还给我
}
},
render:function(){
返回({Test.val})
}
});
log('VAL IS',Test.getVal());
链接到小提琴示例

签出

无论您在
statics
中放置什么,都不会有实际React组件实例的上下文,但是您定义的
val
属性是实际React组件实例的属性。在您实际渲染组件之前,它不会存在,因为所有非静态属性都是在这个时候构造的。静态应该是在实际实例的上下文之外可用的组件相关函数,就像C#和许多其他语言中的静态函数一样


statics
函数访问React组件实例似乎毫无意义。也许你需要考虑一下你真正想要达到的目标。如果您确实希望能够访问特定组件的属性,那么我想您可以将实例作为参数传递给静态函数,但是,一旦您实际构建了一个组件,这当然是可用的。

可能的重复项您是否考虑过将val存储为该组件的支柱,并将getVal放置在statics块之外?不确定在您的情况下这是否是一个选项,但这样应该可以更容易地访问道具。@BhojendraNepal-希望它是一样的。将添加示例到question@noveyak-我认为
static
的整个思想是在“常规”javascript的组件之外调用它,这正是我想做的,但我担心我的示例太简单(可能不正确)。我希望得到一般问题的答案,即如果您不在
statics
中移动
val
,如何从静态函数访问
val
?你能?如果你做不到,那么静力学似乎毫无用处。
var Test = React.createClass({
  statics: {
    val: 5,
    getVal: function() { 
        return this.val
    }
  },
  render: function(){
      return( <div>{Test.val}</div> )
  }
});

console.log('VAL IS' , Test.getVal());