2017-09-26 50 views
0

我有一个阵营组件的onClick道具,包含以下内容:什么是Lodash的_.bind的香草JavaScript等价物?

onClick={_.bind(this.callMe, this, argToPass)} 

请记住,这是在使用React.createClass一个阵营组成部分,因此该组件的功能应绑定到它的上下文。

不幸的是,当我尝试做绑定下面这样的:

onClick={this.callMe(argToPass)} 

它打破了我的测试之一。

我不希望,因为它是作为道具通过这样的结合是:

onClick={this.callMe(argToPass).bind(this)} 

B /性能问题℃。

什么是香草的JavaScript等价的:

_.bind(this.callMe, this, argToPass) 

这将允许该函数正确绑定。

谢谢!

+0

伙计。谁低估没有解释?这是合理的,在一个梦幻般的团队中制作,是一个真正的问题。 –

+0

_我不想通过:'this.callMe(argToPass).bind(this)'b/c的性能问题来绑定它._ - 你的意思是因为这不正确?因为除非'this.callMe()'返回一个函数,否则这只会引发一个错误,但即使它发生了错误,你仍然会在那里发现错误。 **通知**我没有降低评分,我只是评论。 –

+0

存在性能问题,我不想使用该表示法将该函数绑定到该组件的上下文。请参考:https://daveceddia.com/avoid-bind-when-passing-props/ –

回答

4

的JS相当于是Function#bind

this.callMe.bind(this, argToPass) 

顺便说一句 - 我建议避免呈现阶段结合功能的道具。你可以阅读更多关于它Why shouldn't JSX props use arrow functions or bind?

+0

我不想在onClick中绑定。这是否与this.callMe(argToPass).bind(this)相同? –

+0

@zero_cool不,它是不一样的。看到我的评论。 –

+1

你问了'_.bind()'的等价物,并且函数#绑定它。在反应中绑定是一个不同的主题,你应该检查我已经添加到答案的链接。 –

0
onClick = {() => this.callMe(arrtopass)} 

尝试this.it的es6 sentax。

+0

没有骰子。仍然打破测试,但我赞赏反馈。 –

0
import partial from 'lodash/partial' 

// bind using Function.bind 
onClick={partial(this.callMe.bind(this), argToPass)} 

// when binded in constructor or using arrow function 
onClick={partial(this.callMe, argToPass)} 
+0

尽管此代码片段可能是解决方案,但[包括解释](// meta.stackexchange.com/questions/114762/explaining-entirely-基于代码的答案)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 –