我正在尝试启动并运行一个非常简单的react应用程序。

用例很简单:
一个自动完成组件,该组件将获取一组帐户名称,并在更改值后(用户已选择值)-触发事件,将显示该帐户。

这是一个代码段,我正在尝试以一种方式使showAccount方法可以访问App的状态。

如何从showAccount()访问应用程序的状态?

import React, { Component } from 'react';
import injectTapEventPlugin from 'react-tap-event-plugin';

import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import AutoComplete from 'material-ui/AutoComplete';


// Needed for onTouchTap
// http://stackoverflow.com/a/34015469/988941
injectTapEventPlugin();

import './App.css';


class App extends Component {
  constructor () {
    super();
    this.state = {accounts: []}
  }

  componentDidMount() {
    this.setState({ accounts: [
      {account_name: "foo", account_id: 1},
      {account_name: "bar", account_id: 2}
    ]})
  }

  showAccount (value) {
    // HERE IS THE PROBLEM!
    // `this` points to AutoComplete rather than to App
    console.log(this.state.accounts)
  }

  render() {
    return (
      <MuiThemeProvider>
        <div className="App">
        <center>
        <AutoComplete
          floatingLabelText="account name"
          filter={AutoComplete.caseInsensitiveFilter}
          dataSource={this.state.accounts.map((account) => account.account_name)}
          onUpdateInput={this.showAccount}
        /></center>
        </div>
      </MuiThemeProvider>
    );
  }
}

export default App;

最佳答案

您不会错过绑定showAccount方法吗?

检查此代码,这里有一个如何绑定它的示例,您需要对showAccount方法执行相同的操作。

class InputExample extends React.Component {
  constructor(props) {
    super(props);

    this.state = { text: '' };
    this.change = this.change.bind(this);
  }

  change(ev) {
    this.setState({ text: ev.target.value });
  }

  render() {
    let { text } = this.state;
    return (<input type="text" value={text} onChange={this.change} />);
  }
}


在ECMAScript 2015类中,您需要手动绑定方法。

我没有时间去扩展更多内容,因为我正在工作,但请查看本文

http://reactkungfu.com/2015/07/why-and-how-to-bind-methods-in-your-react-component-classes/
 检查ECMAScript 2015类部分
示例代码来自该帖子

问候

09-17 09:00