在反应组件中,如何在静态函数中获取“this”?

Posted

技术标签:

【中文标题】在反应组件中,如何在静态函数中获取“this”?【英文标题】:in a react component, how to get `this` in static function? 【发布时间】:2015-10-13 04:58:50 【问题描述】:

试图在反应组件中创建static 函数。该函数使用this 获取其数据,但调用该函数时this 超出范围。

这是一个非常简单的例子:

var Test = React.createClass( 值:5, 静力学: getVal: function() return this.val , 渲染:返回(this.val) ); 测试.getVal(); => 未定义!!

Test.getVal() 被调用时,this 显然已经失去了它的作用域。如何在getVal() 函数中获取this

仅供参考,以下标准 javascript 父方法不起作用:

Test.getVal.apply( 测试 ); => 未定义

【问题讨论】:

Javascript objects: get parent 的可能重复项 您是否考虑过将 val 存储为组件的 prop 并将 getVal 放在静态块之外?不确定这是否适合您的情况,但应该更容易以这种方式访问​​道具。 @BhojendraNepal - 希望是一样的。将向问题添加示例 @noveyak - 我认为static 的整个想法是它在“常规”javascript 中的组件外部调用,这就是我想要做的 【参考方案1】:

啊,好吧,误会了。如果您需要能够以某种方式随时调用此方法,那么您的 val 也必须位于静态变量中,但您的渲染函数则必须引用 Test.val 而不是 this.val。如果这不是必需的,但最好坚持使用 props/state 并从组件内访问事物,因为组件不会根据对 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());

链接到示例https://jsfiddle.net/dgoks3Lo/

【讨论】:

谢谢,但恐怕我的例子太简单了(而且可能不正确)。我希望得到一般问题的答案,即,如果您不将val 移动到statics 中,您如何从静态函数访问val?你可以吗?如果你做不到,那么静态似乎没什么用。【参考方案2】:

查看the docs on statics。

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

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

【讨论】:

以上是关于在反应组件中,如何在静态函数中获取“this”?的主要内容,如果未能解决你的问题,请参考以下文章

如何执行在子组件中调用的函数作为反应中的属性?

如何避免在反应功能组件中对“静态组件”进行不必要的重新渲染?

如何在反应中设置视频端组件的状态?

功能组件在反应中有道具吗?

从模态对原始组件反应本机调用函数

我可以在反应组件的构造函数中使用箭头函数吗?