反应点击处理程序并绑定它

时间:2014-10-13 18:10:54

标签: reactjs

我有一个react组件,我在列表上迭代并创建行。在每一行中都有一个删除按钮。单击删除按钮时,我想传递对该行中元素的引用。

var TagTable = React.createClass({

        onTagDelete: function(tagName) {
            this.props.onTagDelete(tagName);
        },

        render: function () {
            return R.table({className: "bg-box padded"}, [
                R.thead({},
                    R.tr({}, [
                        R.th({}, ""),
                        R.th({}, "Tag"),
                        R.th({}, "Regexes")
                    ])),
                R.tbody({},
                    this.props.tags.map(function (tag) {
                        return R.tr({}, [
                            R.td({}, R.button({onClick: function() {this.onTagDelete(tag.name)}.bind(this), // BIND
                                className: "delete"}, "\u2716")),
                            R.td({key: "name"}, tag.name),
                            R.td({key: "regexes"}, tag.regexes.join(", "))]);
                    }.bind(this))) // BIND
            ])
        }
    }
);

所以为了在click-handler中保留this-value;我对map()和click-handler都使用bind。

这是在React中将参数传递给处理程序的正确方法还是有更好的方法?

2 个答案:

答案 0 :(得分:3)

我反应很新,但我想我会把它扔出去帮忙。

我认为你需要改变这一行,

R.td({}, R.button({onClick: function() {this.onTagDelete(tag.name)}.bind(this), // BIND
                            className: "delete"}, "\u2716")),

R.td({}, R.button({onClick: function() {this.onTagDelete.bind(this, tag.name)}, // BIND
                            className: "delete"}, "\u2716")),

我很确定现在应该将标记名称传递给函数。从点击的主题获取数据的另一种方法是通过引用,但是由于重复的引用名称,我不认为这很有效。所以我会做你现在正在做的事情。

答案 1 :(得分:1)

你可以做的更简洁:

 R.td({}, R.button({onClick: this.onTagDelete.bind(this, tag.name), // BIND
                                className: "delete"}, "\u2716")),
相关问题