只是想知道你们经常使用这样的结构。
class Cmp extends React.Component {
constructor(props){
super(props);
this.handler = this.handler.bind(this)
}
handler(x) {
return () => console.log(`${x}, i am not immediately called`)
}
render() {
return(
<div>
<div onClick={this.handler('hey')}
</div>
)
}
}
问题是, - 我在哪个宇宙中是对的?
答案 0 :(得分:2)
这是做到这一点的方法但是一个更优雅的解决方案是你可以使用babel-preset-stage-0
。使用它你不必在构造函数中编写绑定。你的程序将变为
class Cmp extends React.Component {
constructor(props){
super(props);
}
//This will bind automatically
handler = (x) => {
return () => console.log(`${x}, i am not immediately called`)
}
render() {
return(
<div>
<div onClick={this.handler('hey')}></div>
</div>
)
}
}
因此,如果您定义了许多功能,那么它就会派上用场。
答案 1 :(得分:2)
我没有使用箭头功能,因为每次组件都会安装它 导致在构造函数
中重新绑定函数
嗯,这只是创建对象的成本。对于&#34;常规功能&#34;会发生同样的情况。绑定在构造函数中。
我&#39;不在渲染中使用胖箭头,因为每个渲染都会创建一个新的 功能
但是你要在每个渲染上返回新函数:)组件重新渲染并调用handler
,它返回新函数并将其作为道具传递。
IM&#39;不在渲染中使用绑定,因为它将导致重新绑定 每个渲染
与上述相同。
不确定4是什么意思。
答案 2 :(得分:1)
我认为你应该这样做:
class Cmp extends React.Component {
constructor(props) {
super(props);
this.handler = this.handler.bind(this)
}
handler = (x) => {
return (console.log(`${x}, i am not immediately called`))
}
render() {
return (
<div>
<div onClick = {()=>{this.handler('hey')}}> </div>
</div>
)
}
}
并且您提到的要点是反应的核心,如果您想创建反应应用程序,那么您将不得不这样做。