如何在具有更多参数的函数中使用e.preventDefault()?

时间:2019-03-20 19:32:09

标签: javascript reactjs

我正在React中处理一个表单,我需要使用event.preventDefault。同时,我还需要将其他参数传递给父函数。我尝试使用下面的代码正常添加它们,但是似乎不起作用;我怎样才能做到这一点?我已经看过其他问题,但没有找到解决办法的运气。

handleSubmit = (event, param1, param2) => {
    event.preventDefault();

    this.setState(prevState => {
        // piece of code where i need to use the other parameters    
   }); 
}

3 个答案:

答案 0 :(得分:1)

类似的东西吗?

DataProcessor(DataPointer &&p) : pData(std::move(p)) {}
template<typename T = DataPointer>
DataProcessor(std::enable_if_t<std::is_copy_constructible_v<T>, const T&> p)
        : pData(p) {}

答案 1 :(得分:1)

在此处阅读有关合成事件和事件池的文章,以了解为什么这不能按您期望的方式工作:https://reactjs.org/docs/events.html

但是,您可以将参数传递给事件处理程序调用的函数。例如:

handleClick(param1, param2){
   // no need to preventDefault here, you can't anyway, since you called it in onClick
   this.setState(prevState=> {
       // do something with param1 and param2
   })

render() {
    const param1 = "someVal";
    const param2 = 0;
    return <div onClick={e=> { e.preventDefault(); this.handleClick(param1,param2)} }/>
}

答案 2 :(得分:0)

要获取事件和附加参数,您需要使用闭包。

const btn = document.querySelector('button');

function callback(name) {
   return function(e) {
     e.preventDefault();
     console.log(e.target.id);
     console.log(name);
     document.querySelector('#name').innerText = name;
   };
}

btn.addEventListener('click', callback('Paul'));
<form action="#">
  <div id="name"></div>
  <button id="test" type="submit">Submit</button>
</form>