reactjs - React 事件处理程序中 this 的值

标签 reactjs

由于某种原因,这个值在 react 事件处理程序中丢失了。阅读文档,我认为 React 在这里做了一些事情,以确保将其设置为正确的值

以下内容并不像我预期的那样工作

import React from 'react';

export default class Observer extends React.Component {

    handleClick() {
        console.log(this); //logs undefined
    }
    render() {
        return (
            <button onClick={this.handleClick}>Click</button>
        );
    }
}

但这确实:

import React from 'react';

export default class Observer extends React.Component {

    handleClick() {
        console.log(this); //logs Observer class instance
    }
    render() {
        return (
            <button onClick={this.handleClick.bind(this)}>Click</button>
        );
    }
}

React 和 ES6 对我来说是新的,但这似乎不是正确的行为?

最佳答案

如果您使用新的 class 语法,这对于 JavaScript 和 React 来说是正确的行为。

autobinding feature does not apply to ES6 classes在 v0.13.0 中。

所以你需要使用:

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

或者其他技巧之一:

export default class Observer extends React.Component {
  constructor() {
    super();
    this.handleClick = this.handleClick.bind(this);
  }
  handleClick() {
    /* ... */
  }
  render() {
      return <button onClick={this.handleClick}>Click</button>
  }
}

关于reactjs - React 事件处理程序中 this 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29732015/

相关文章:

reactjs - 在 Vercel 中部署 React 应用程序时出现 404 错误

javascript - Redux 调度不会从数组中删除项目

javascript - 使用 React 的天气应用程序 : problems inputing custom Lat/Long into API request

reactjs - 自定义组件 "ValueContainer"的 React-Select 失去焦点

reactjs - 在react中将数据传递给父组件

javascript - 导入 SASS 文件的测试组件时出现语法错误

javascript - 使用 React,如何使变量的值动态化?

reactjs - npx create-react-app 不工作 "Must use import to load ES Module:"

javascript - 我试图将一个常量与一组其他 HTML 结合起来,但出现错误

reactjs - 如何在 React 中使用 Redux 将多个状态映射到 props?