2017-02-21 103 views
3

我有一个组件定义这样阵营母语:Access组件状态的静态函数

export class A extends Component{ 
    constructor(props){ 
    this.state = { 
     scene:0 
    } 
    } 
    static changeScene(scene){ 
    this.setState({scene:scene}) 
    } 
} 

我想从任何地方使用A.changeScene(sceneVal) 改变A.现场呼叫改变场景里面的问题是,我可以无法访问this.setState我得到了这个错误Unhandled JS Exception: this.setState is not a function.

我相信A组件已经被挂载。我可以通过定义一个全局变量var self = null;并在构造函数的构造self = this内绕过这个错误,但我希望有一个更好的方式来rosolve这个问题

+0

你可以肯定,世界上只有成分'A'的单个实例?如果是,那么将'this'分配给一个静态变量似乎是合理的。如果不是,那么你需要重新思考这个问题。 –

+0

我不确定静态函数是否需要“绑定”来保持上下文。你可以试一试 – jose920405

+0

静态函数永远不会访问你的非静态函数可以访问的'this'。考虑非静态方法,因为每个实例都有它,并且考虑类的静态方法。 –

回答

1

原因是,如果你使用static function那么static方法将无法在该函数内部访问this。您应该避免使用static函数。 Static方法无法访问使用thisclass实例上定义的值,属性和方法。

检查这篇文章:http://odetocode.com/blogs/scott/archive/2015/02/02/static-members-in-es6.aspx

+0

正在定义一个全局var self =这是一个坏主意?它将不会超过A的一个实例。谢谢:) – Coyote

+1

你可以使用全局变量,但是我认为使用像redux/flux这样的架构会更容易完成这种任务。让我们从任何你想在A中改变某个组件的东西说,传递值来存储在A组件中听取更改。这将是一个更合适的方式:) –