【发布时间】:2015-09-28 14:40:50
【问题描述】:
在 React(通过 babel 使用 ES6)中,我试图创建一个静态方法来更新它所包含的组件的状态。将对象作为参数。问题是“this”永远不会绑定到词法范围。
static updateList = (Item) => {
this.setState({ cartUpdated: Date.now() }); //setState is not available
}
在其他组件中...
<div onClick={Cart.updateList.bind(this,this.props)}>Click</div>
起初我认为这可能是由于通过“bind”传递的“this”,但我在包含点击处理程序的组件中创建了一个重复的非静态箭头方法,我可以很好地访问词法“this”。
在绝望中也尝试制作 setState 的静态克隆,但没有成功。
我认为这是一个结构/安全决定(如果我们泄露“this”,我们就会泄露所有内容!)但是如何处理对“this”的访问?此限制是否强制 updateList 函数必须位于 updateList 和带有单击处理程序的组件之上?当然,这实际上可能更像反应,但我很好奇。
【问题讨论】:
-
“一个更新它所包含的组件状态的静态方法” - 你没有任何意义。静态方法在类上,没有状态。你想要一个实例方法吗?然后使用一个。
-
如果您可以提供一个可以通过实例访问的方法的工作示例,当在调用组件的子组件或父组件中找不到该实例时,那就太棒了。跨度>
-
“找不到所述实例时”是什么意思?我假设
this是你的实例? -
我的意思是我试图从中访问方法的 React 组件。据我所知,除非我渲染组件并通过 refs 访问它的方法、扩展它或继承方法作为 props,否则我无法直接访问它的方法。
-
例如,如果我这样做了: var Child = React.createClass({…}); var myChild = React.render(React.createElement(Child, {}), mountNode); myChild.someMethod();
标签: javascript reactjs ecmascript-6 arrow-functions