我将2个值传递给子组件:

要显示的对象列表 删除功能。

我使用.map()函数来显示我的对象列表(就像在react教程页面中给出的例子一样),但该组件中的按钮在呈现时触发onClick函数(它不应该在呈现时触发)。我的代码是这样的:

module.exports = React.createClass({
    render: function(){
        var taskNodes = this.props.todoTasks.map(function(todo){
            return (
                <div>
                    {todo.task}
                    <button type="submit" onClick={this.props.removeTaskFunction(todo)}>Submit</button>
                </div>
            );
        }, this);
        return (
            <div className="todo-task-list">
                {taskNodes}
            </div>
        );
    }
});

我的问题是:为什么onClick函数在渲染和如何使它不火?


当前回答

你没有将函数作为参数传递,而是直接调用它,这就是为什么它会在渲染时启动。

如何解决

有两种方法:

第一个

<Button onClick={() => { 
this.props.removeTaskFunction(todo);
}
}>click</Button>

OR

只需要绑定

this.props.removeTaskFunction.bind(this,todo);

其他回答

你需要使用onClick的箭头函数,以防止立即调用。 如果你的按钮是这样的:

<button onClick={yourfunctionname()} />

一定是这样的:

<button onClick={() => yourfunctionname(params)} />

onClick属性的值应该是一个函数,而不是函数调用。

<button type="submit" onClick={function(){removeTaskFunction(todo)}}>Submit</button>

JSX与ReactJS一起使用,因为它与HTML非常相似,它给程序员使用HTML的感觉,而它最终转换为javascript文件。

编写for循环并指定函数为 {this.props.removeTaskFunction(todo)}将执行这些函数 每当循环被触发时。 为了阻止这种行为,我们需要将函数返回给onClick。 胖箭头函数与bind一起有一个隐藏的return语句 财产。因此,它像Javascript一样将函数返回给OnClick 也返回函数!!!!!

使用- - - - - -

onClick={() => { this.props.removeTaskFunction(todo) }}

这意味着,

var onClick = function() {
  return this.props.removeTaskFunction(todo);
}.bind(this);

与其调用函数,不如将值绑定到函数:

this.props.removeTaskFunction.bind(this, todo)

MDN参考:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind

问题在于如何传递函数

此时你不是传递函数,而是调用它:

<Button onClick={yourFunction()} />

你可以用两种方法解决这个问题:

<Button onClick={() => yourFunction(params)} />

或者如果你没有任何参数:

<Button onClick={yourFunction} />