javascript - 如何使用 react 在列表上获取点击事件?

标签 javascript reactjs react-native react-router

你能告诉我如何绑定(bind)列表的点击事件吗?如何在 React 的列表点击句柄上发送对象。这是我的代码。 http://codepen.io/naveennsit/pen/yOWRqB

class App extends React.Component{
  constructor(){
     super();
    this.state ={data: [{hse:'asd'},{hse:'adas'}]};
    this.btnClick = this.btnClick.bind(this)
  }

  componentDidMount(){
    this.loadFromServer();
    //alert('--')
  }
  loadFromServer(){
   //alert('000000')
    $.ajax({
      url: "http://mysafeinfo.com/api/data?list=englishmonarchs&format=json",
      dataType: 'json',
      success: (data) => {
        console.log("=======");
        console.log(data);
        this.setState({data: data});
      },
      error: (xhr, status, err) => {
        console.error(xhr);
      }
    });
  }

  btnClick(obj){
    alert('---'+obj)
    this.setState({data: 'nannsd'});
   //  this.state ={data: 'sds'};
  }

  render(){
    return <ul>
      {this.state.data.map(function(item) {
        console.log('---')
        return <li {this.btnClick}>{item.hse}</li>;
      })}
    </ul>
  }

}

React.render(<App/>,document.getElementById('app'))

最佳答案

使用这段代码:

class App extends React.Component{
  constructor(){
     super();
    this.state ={data: [{hse:'asd'},{hse:'adas'}]};
    this.btnClick = this.btnClick.bind(this)
  }

  componentDidMount(){
    this.loadFromServer();
    //alert('--')
  }
  loadFromServer(){
   //alert('000000')
    $.ajax({
      url: "http://mysafeinfo.com/api/data?list=englishmonarchs&format=json",
      dataType: 'json',
      success: (data) => {
        console.log("=======");
        console.log(data);
        this.setState({data: data});
      },
      error: (xhr, status, err) => {
        console.error(xhr);
      }
    });
  }

  btnClick(obj){
    alert('---'+obj)
    this.setState({data: 'nannsd'});
   //  this.state ={data: 'sds'};
  }

  render(){
    return (
      <ul>
        {this.state.data.map((item) => {
          console.log('---')
          return <li onClick={this.btnClick}>{item.hse}</li>;
        })}
      </ul>
    );
  }

}

React.render(<App/>,document.getElementById('app'))

所以 2 个变化:

  • return <li {this.btnClick}>{item.hse}</li> => return <li onClick={this.btnClick}>{item.hse}</li>定义您要处理的事件。

  • {this.state.data.map(function(item) => {this.state.data.map((item) => {有正确的this上下文。

关于javascript - 如何使用 react 在列表上获取点击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37291129/

相关文章:

javascript - 样式组件 : I want to use Variable in Styled-Component

javascript - 使用 this.props.someVariable

react-native - 如何在 map 上放置标记时获取坐标

javascript - 异步迭代 API 结果

javascript - blockUI 与 IE11 的兼容性问题?

javascript - Rails asset pipeline编译js报错

reactjs - react native 状态不更新功能

javascript - AMD/select2 行为差异?

javascript - 变量在 react 组件中的函数之外不可用

javascript - React Hook新手,为什么使用一次后状态未定义?