Javascript 在React事件处理程序中使用参数来操作特定状态

Javascript 在React事件处理程序中使用参数来操作特定状态,javascript,reactjs,Javascript,Reactjs,我的状态是这样的: state={a:0,b:0,c:0} 我正在尝试编写一个eventHandler函数,它将接受参数“value”,这样我就可以将相同的函数作为一个道具传递给几个按钮,这些按钮将根据提供的参数设置状态 eventHandler =(value)=>{ this.setState({value:this.state.value+1}) } <button onClick={this.eventHandler.bind(this,'a')}><butt

我的状态是这样的:

state={a:0,b:0,c:0}
我正在尝试编写一个eventHandler函数,它将接受参数“value”,这样我就可以将相同的函数作为一个道具传递给几个按钮,这些按钮将根据提供的参数设置状态

eventHandler =(value)=>{
this.setState({value:this.state.value+1})
}

<button onClick={this.eventHandler.bind(this,'a')}><button/>
<button onClick={this.eventHandler.bind(this,'b')}><button/>
<button onClick={this.eventHandler.bind(this,'c')}><button/>
eventHandler=(值)=>{
this.setState({value:this.state.value+1})
}
其思想是,每个按钮接受具有不同参数的相同函数,但只更改参数中传递的状态,而不更改其他按钮

如果将此函数作为道具传递给子组件,并在其中分配和使用参数,我也会非常感兴趣如何实现它

<Parent click = {this.eventHandler.bind(this,'')}/>

|


它不起作用,我不确定这样做是否正确。 我感谢任何帮助和建议


谢谢

根据您的代码,我认为这就是您想要的。控制台日志仅用于查看状态的更改

工作示例

从“React”导入React;
从“react dom”导入react dom;
类应用程序扩展了React.Component{
状态={
变量:{
答:0,,
b:1
}
};
handleClick=val=>{
const prevVal=this.state.variables[val];
这是我的国家(
{变量:{…this.state.variables[val]:prevVal+1},
() => {
console.log(this.state);
}
);
};
render(){
返回(
this.handleClick(“a”)}>单击a
this.handleClick(“b”)}>单击b
);
}
}
const rootElement=document.getElementById(“根”);
render(,rootElement);

您能解释一下您遇到了什么错误吗?如果我将函数直接传递给按钮,效果会非常好,谢谢。如果您也能建议我如何在状态为state={variables:{a:0,b:0},}的情况下使嵌套对象工作,我将不胜感激,因为我无法使它工作。是否有可能将函数传递给子函数,并在那里设置val参数?非常感谢@DimitryIvashchuk我已经更新了嵌套对象的代码。如果要传递函数,只需将其作为道具传递(
this.handleClick
),并在子组件中设置val参数。
<button onClick={click('b')}>
import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component {
  state = {
    variables: {
      a: 0,
      b: 1
    }
  };

  handleClick = val => {
    const prevVal = this.state.variables[val];

    this.setState(
      { variables: { ...this.state.variables, [val]: prevVal + 1 } },
      () => {
        console.log(this.state);
      }
    );
  };

  render() {
    return (
      <React.Fragment>
        <button onClick={() => this.handleClick("a")}>click a</button>
        <button onClick={() => this.handleClick("b")}>click b</button>
      </React.Fragment>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);