Как я могу обновить состояние с помощью массива внутри объекта? - PullRequest
0 голосов
/ 22 сентября 2018

это состояние, которое я хочу обновить

 inputData: {
      id: '',
      inputArr: ['']
    }

Я генерирую входные данные из моего состояния

 inner = arr.input.map((inputs, index) => {
        return (
          <li key={index}>
            <label>{inputs.inputLabel}</label>
            <input
              name={index}
              //value={inputs.inputValue}
              type={inputs.inputType}
              onChange={this.handleChangeInp}
            />
          </li>

как мне использовать hanldeChangeInp, чтобы захватить ввод и передать его вinputArr,

это то, что я сделал до сих пор:

 handleChangeInp = e => {
    const index = Number(e.target.name)
    const inputData = this.state.inputData.inputArr.map((ing, i) => {
      i == index ? e.target.value : ing;
    });
    this.setState({ inputData });
  };

но это не так хорошо работает ... Я делаю несколько входов, поэтому мне нужно, чтобы он был вмассив для последующего извлечения

1 Ответ

0 голосов
/ 22 сентября 2018

Если все, что вы делаете, обновляет значение вашего массива по определенному индексу.Вы можете просто обновить индекс вложенного массива, а затем установить для состояния значение обновленных inputData.

handleChangeInp = e => {
    const index = Number(e.target.name)
    // upon research, changing inputData directly will mutate state
    const {inputData} = this.state;
    // so, spreading inputArr into a new variable creates a copy
    const inputArr = [...inputData.inputArr]
    inputArr[index] = e.target.value;
    // set state will full object data
    this.setState({ inputData: {id: inputData.id, inputArr}});
};
...