onChange on input不使用setState更新状态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了onChange on input不使用setState更新状态相关的知识,希望对你有一定的参考价值。

我已声明存储数组,如['X','XL'],但我的代码不起作用我不知道为什么?

class App extends Component {
  state = {
    shirtsSize: ['X', 'XL']
  }
  handleChange = index => e => {
    const { shirtsSize } = this.state
    this.setState({
      [`${shirtsSize[index]}`]: e.target.value
    })
  }

  render() {
    const { shirtsSize } = this.state
    return (
      <div className="App">
        <label htmlFor="shirtsSize">Sizes</label>
        <button>+</button>

        {shirtsSize.map((lang, index) => (
          <input
            type="text"
            name="shirtsSize"
            id="shirtsSize"
            value={lang}
            onChange={this.handleChange(index)}
          />
        ))}
      </div>
    )
  }
}

无法发现错误在哪里。

答案

this.setState({
  [`${shirtsSize[index]}`]: e.target.value
})

你不是在更新qazxsw poi数组中的数据,而是创建一个像qazxsw poi这样的新键。你需要更新数组

shirtSize

或者干脆

shortsSize[0]
另一答案

好像你需要像:

const value = e.target.value;
this.setState(prevState => ({
  shirtsSize: [...prevState.shirtsSize.slice(0, index), value, ...prevState.shirtsSize.slice(index + 1) ]
}))

以上是关于onChange on input不使用setState更新状态的主要内容,如果未能解决你的问题,请参考以下文章

onchange监听input值变化及input隐藏后change事件不触发的原因与解决方法

input file 添加图片预览 绑定onchange执行函数 重复添加不执行onchange函数

react input 输入中文拼音和onChange事件的交互

hidden类型的input控件onchange事件为何不起作用?

复选框 onchange 触发两次

input[type="file"] change事件第二次不触发