Reactjs React,onClick回调参数

Reactjs React,onClick回调参数,reactjs,Reactjs,为什么要用三个参数来响应set onClick回调 nativeEvent可以通过proxyEvent.nativeEvent获取。为什么在第三个参数处反应set nativeEvent 如果我单击按钮,console.log(args)give meProxy,undefined,Event,第三个参数不是我想要的 但是在componentDidMount中,调用this.clickHandler,它会给我null,null,'b2c',第三个参数'b2c',这就是我想要的 class Re

为什么要用三个参数来响应set onClick回调

nativeEvent
可以通过
proxyEvent.nativeEvent
获取。为什么在第三个参数处反应
set nativeEvent

如果我单击按钮,
console.log(args)
give me
Proxy,undefined,Event
,第三个参数不是我想要的

但是在
componentDidMount
中,调用
this.clickHandler
,它会给我
null,null,'b2c'
,第三个参数'b2c',这就是我想要的

class ReactEventArgument扩展了React.Component{
componentDidMount(){
this.clickHandler(null,null,'b2c');
}
render(){
返回
}
clickHandler=(e、v、类型='b2c')=>{
log(Array.prototype.slice.call(arguments));
控制台日志(e、v、类型);
//如果我点击按钮,我会得到一个错误的类型,类型是nativeEvent,而不是我的参数。
}
} 
子类扩展了React.Component{
render(){
const{clickHandler}=this.props;
返回
点击我
}
}


React解释了它的事件内容。当您像这样显式地调用事件处理程序时,您没有传递在典型事件处理程序中react将发送给您的相同内容。如果您需要这样显式地调用它,请使用第四个参数,这样它就可以通过react保持可用。否则,只需在事件处理程序中调用一个函数来完成您所需的操作,并在componentWillMount中调用该函数即可

例如:

class ReactEventArgument extends React.Component{

    componentDidMount() {
        this.customFunction('b2c');
    }

    render() {
        return <div>
            <Child clickHandler={this.clickHandler}></Child>
        </div>  
    }

    customFunction = (type) => {
      // do your stuff here
    }

    clickHandler = (e) => {
        this.customFunction('b2c')
    }
} 
class ReactEventArgument扩展了React.Component{
componentDidMount(){
这是一个自定义功能(“b2c”);
}
render(){
返回
}
自定义函数=(类型)=>{
//在这里做你的事
}
clickHandler=(e)=>{
this.customFunction('b2c'))
}
} 

你必须小心代理事件,即使是控制台。记录它们(例如在Chrome中)不会给你它们的真实价值,因为它们是短暂的

除此之外,最简单的方法是:

class Child extends React.Component{

    clickHandler(type = 'b2c') {
        console.log(type);  // 1) coming from button, then output will be foobar
                            // 2) coming from something else that 
                            //    doesn't pass in anything, output will be b2c
    }

    render() {
        return <div>
            <button type="button" onClick={() => this.clickHandler("foobar")}>click me</button>
        </div>
    }
}
类子级扩展React.Component{
clickHandler(类型='b2c'){
console.log(type);//1)来自按钮,然后输出将是foobar
//2)来自其他
//不传入任何内容,输出将是b2c
}
render(){
返回
这个.clickHandler(“foobar”)}>点击我
}
}

谢谢您的回复。我知道
文件
。我的问题是有三个默认参数传递到事件回调<代码>代理事件
未定义
nativeEvent
。如果我使用第三个参数,可能会导致错误。默认的第三个参数
nativeEvent
不是我所期望的。我刚刚注意到你对另一个答案的评论,关于第三个参数。除非您需要“e”变量(例如,我有时将其用于输入值
e.target.value
),否则不要传递它