【问题标题】:ReactJS onClick event inside map function, then call parent's function地图函数内的ReactJS onClick事件,然后调用父函数
【发布时间】:2017-04-06 12:08:59
【问题描述】:

我刚刚开始使用 ReactJS,但我不知道如何使 onClick 事件在 map 函数中工作,该函数会呈现一些类似的元素。 当我不在子元素中使用 onClick={this.someMethodName} 时,一切正常,所以我猜测“this”关键字不再指代父元素。

这是我的代码,它呈现一个简单的菜单栏:

var SupplierBarComponent = React.createClass({
doSomething: function () {
    console.log("aaaaaaaah");
},

render: function() {

    const suppliers = this.props.data.map(function(supplier){
        return (
            <option onClick={this.doSomething} key={supplier.id}>{supplier.name}</option>
        );
    }, this);

    return(
        <div>{suppliers}</div>
    );

}

我怎样才能让它工作? 我已经阅读了一些类似的问题*,但他们的解决方案对我不起作用,或者我无法让它们起作用。

*: React onClick inside .map then change data in another sibling component "this" is undefined inside map function Reactjs Pass props to parent component in React.js

【问题讨论】:

  • 如果你在 map 函数中 console.log 这个是返回组件对象吗?
  • 是的,确实如此。如果我通过 console.log(this.doSomething) 调用它 - 所以没有 ()s,它会打印函数本身: 3models.jsx:9() { console.log("aaaaaaah");如果我用括号调用它,它首先打印“未定义”,但该函数仍然被调用,它打印出“aaaah”。
  • 你需要做this.doSomething.bind(this) ??取决于您在 doSomething 中对 this 的使用?此外,您应该获得一个包含更多信息的合成事件对象...

标签: javascript reactjs


【解决方案1】:

您的代码正在运行。我已经在这个 Fiddle 上检查过了。我只是硬编码了一个数组而不是 props。

var Hello  = React.createClass({
doSomething: function () {
    console.log("aaaaaaaah");
},

render: function() {
        var data=[{id:1,name:'name 1'},{id:2,name:'name 2'}]
    const suppliers = data.map(function(supplier){
        return (
            <option onClick={this.doSomething} key={supplier.id}>{supplier.name}</option>
        );
    }, this);

    return(
        <div>{suppliers}</div>
    );
}
})

ReactDOM.render(
  <Hello />,
  document.getElementById('container')
);

https://jsfiddle.net/evweLre5/

【讨论】:

  • 感谢您检查它的努力,它显然在小提琴中工作。那么我在本地机器上做错了什么?我只是不知道去哪里找。
  • 我给你的第一个建议是开始使用 ES6 约定来处理反应代码。
  • 我在本地也试过了,效果很好。
  • 你在使用 babel 吗?
猜你喜欢
  • 2016-11-08
  • 1970-01-01
  • 2014-11-22
  • 2020-02-14
  • 2022-08-04
  • 2020-08-08
  • 1970-01-01
  • 2014-10-15
相关资源
最近更新 更多