每天30s系列|在 React 组件类中如何保证 `this` 为正确的上下文?

Posted 水煮不是清蒸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天30s系列|在 React 组件类中如何保证 `this` 为正确的上下文?相关的知识,希望对你有一定的参考价值。

回答

javascript 类中,默认情况下方法并没有被绑定。这意味着他们的 this 上下文可以被改变(例如:事件处理方法中 this 为正在侦听事件的元素)但不排除为组件实例。要解决此问题,可以使用 Function.prototype.bind() 强制将组件实例作为 this 上下文。

constructor(props) { super(props); this.handleClick = this.handleClick.bind(this);}handleClick() { // Perform some logic} 

  • bind 不仅啰嗦而且需要定义一个 constructor,因此我们可以使用新的公共类字段语法:

handleClick = () => { console.log('this is:', this);}
render() { return ( <button onClick={this.handleClick}> Click me </button> );}

  • 你也可以使用内联箭头函数,因为 this(组件实例)是受到保护的:

<button onClick={e => this.handleClick(e)}>Click me</button>

加分回答

  • 需要注意的是,使用内联箭头函数会产生额外的再次渲染,因为在渲染时会创建一个新的函数引用,这样新的引用就会传递给子组件并且中断 shouldComponentUpdate / PureComponent 的相等检查来阻止不必要的重新渲染。在性能很重要的情况下,最好在构造函数中使用 bind 或优先使用公共类字段语法,因为他们的函数引用是保持不变的。



以上是关于每天30s系列|在 React 组件类中如何保证 `this` 为正确的上下文?的主要内容,如果未能解决你的问题,请参考以下文章

每天30s系列|介绍 React 中的 Refs 及其使用场景?

如何使用组件类中的 react-router 链接来使用组件中的数据?

React - 如何将变量分配给另一个组件类中的输入值? [复制]

Material-UI Typescript 如何在组件类中从 makeStyle() 创建样式实例

React 系列知识

在 React Native 中的类中挂钩