javascript - 为什么当状态在 ReactJs 上有对象时我的 onChange 不起作用

标签 javascript reactjs

我尝试使用 ES6 的 ReactJS 构建一个应用程序

class MyApp extends React.Component{
  constructor(props){
    super(props);
    this.state = {
      employee:{
      name: 'hello',
      birthday: ''
      },
      price: ''
    }
    this.handleValueChange = this.handleValueChange.bind(this);
  }
  handleValueChange(event){
    valueName = event.target.name
    this.setState({[valueName]: event.target.value});
  };
  render(){
    return(
    <form>
      <input type="text" placeholder="name" value={this.state.employee.name} onChange={this.handleValueChange} name="name"/>
      <input type="text" placeholder="name" value={this.state.price} onChange={this.handleValueChange} name="price"/>
    </form>
    )
  }
}

作为我的代码,我使用 handleVauleChangeonChange事件来改变输入html标签的默认状态。如果this.state中的数据是对象(如员工),handleVauleChange函数不起作用,但数据就像价格一样,它会正常工作。

为什么会发生这种情况?

最佳答案

名称输入的 setState 应该是这样的...

this.setState({
    employee: {
        [valueName]: event.target.value
    }
});

不确定您需要的状态结构有多动态,但对于一层深层结构,您可以执行类似的操作...

handleValueChange(event) {
    const valueName = event.target.name;
    const parent = valueName.indexOf('.') !== -1 ? valueName.split('.')[0] : false;
    if (parent) {
        this.setState({
            [parent]: {
                [valueName]: event.target.value
            }
        });
    } else {
        this.setState({
            [valueName]: event.target.value
        });
    }
}

在您的输入字段上...

<input 
    type="text" 
    placeholder="name" 
    name="employee.name"
    value={this.state.employee.name} 
    onChange={this.handleValueChange} />
<input 
    type="text" 
    placeholder="price" 
    name="price"
    value={this.state.price} 
    onChange={this.handleValueChange} />

关于javascript - 为什么当状态在 ReactJs 上有对象时我的 onChange 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40696874/

相关文章:

reactjs - React-google-maps "' google'未定义”错误

javascript - React Router 子渲染问题

javascript - 流路由器重定向数据插入 Meteor js

javascript - 如何使用 JavaScript 防止手指触摸(在触摸屏上)?

javascript - 'Dive into python' 的 jquery 等价物是什么?

javascript - 我怎么可能仅仅通过查看网站或打开电子邮件就感染病毒?

javascript - 将调度函数传递给子组件

javascript - 单击即可切换事件和非事件图像

javascript - 使用 tbody 内的 id 从 tr 读取数据

reactjs - 基于另一个非必填字段的Yup验证