We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在react应用中,事件名都是用小驼峰格式进行书写,例如onclick要改写成onClick
react
onclick
onClick
最简单的事件绑定如下:
class ShowAlert extends React.Component { showAlert() { console.log("Hi"); } render() { return <button onClick={this.showAlert}>show</button>; } }
从上面可以看到,事件绑定的方法需要使用{}包住
{}
上述的代码看似没有问题,但是当将处理函数输出代码换成console.log(this)的时候,点击按钮,则会发现控制台输出undefined
console.log(this)
undefined
为了解决上面正确输出this的问题,常见的绑定方式有如下:
this
如果使用一个类组件,在其中给某个组件/元素一个onClick属性,它现在并会自定绑定其this到当前组件,解决这个问题的方法是在事件函数后使用.bind(this)将this绑定到当前组件中
.bind(this)
class App extends React.Component { handleClick() { console.log('this > ', this); } render() { return ( <div onClick={this.handleClick.bind(this)}>test</div> ) } }
这种方式在组件每次render渲染的时候,都会重新进行bind的操作,影响性能
render
bind
通过ES6的上下文来将this的指向绑定给当前组件,同样再每一次render的时候都会生成新的方法,影响性能
ES6
class App extends React.Component { handleClick() { console.log('this > ', this); } render() { return ( <div onClick={e => this.handleClick(e)}>test</div> ) } }
在constructor中预先bind当前组件,可以避免在render操作中重复绑定
constructor
class App extends React.Component { constructor(props) { super(props); this.handleClick = this.handleClick.bind(this); } handleClick() { console.log('this > ', this); } render() { return ( <div onClick={this.handleClick}>test</div> ) } }
跟上述方式三一样,能够避免在render操作中重复绑定,实现也非常的简单,如下:
class App extends React.Component { constructor(props) { super(props); } handleClick = () => { console.log('this > ', this); } render() { return ( <div onClick={this.handleClick}>test</div> ) } }
上述四种方法的方式,区别主要如下:
综合上述,方式四是最优的事件绑定方式
The text was updated successfully, but these errors were encountered:
时隔多年,终于搞懂了一些
Sorry, something went wrong.
hook之后没人这么玩了,只能面试用用
No branches or pull requests
一、是什么
在
react
应用中,事件名都是用小驼峰格式进行书写,例如onclick
要改写成onClick
最简单的事件绑定如下:
从上面可以看到,事件绑定的方法需要使用
{}
包住上述的代码看似没有问题,但是当将处理函数输出代码换成
console.log(this)
的时候,点击按钮,则会发现控制台输出undefined
二、如何绑定
为了解决上面正确输出
this
的问题,常见的绑定方式有如下:render方法中使用bind
如果使用一个类组件,在其中给某个组件/元素一个
onClick
属性,它现在并会自定绑定其this
到当前组件,解决这个问题的方法是在事件函数后使用.bind(this)
将this
绑定到当前组件中这种方式在组件每次
render
渲染的时候,都会重新进行bind
的操作,影响性能render方法中使用箭头函数
通过
ES6
的上下文来将this
的指向绑定给当前组件,同样再每一次render
的时候都会生成新的方法,影响性能constructor中bind
在
constructor
中预先bind
当前组件,可以避免在render
操作中重复绑定定义阶段使用箭头函数绑定
跟上述方式三一样,能够避免在
render
操作中重复绑定,实现也非常的简单,如下:三、区别
上述四种方法的方式,区别主要如下:
综合上述,方式四是最优的事件绑定方式
参考文献
The text was updated successfully, but these errors were encountered: