onChange на входе не обновляет состояние с помощью setState - PullRequest
0 голосов
/ 12 октября 2018

У меня есть состояние этого массива хранения, например ['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>
    )
  }
}

Не удалось определить, где находитсяошибка.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

С

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

вы не обновляете данные в массиве shirtSize, но создаете новый ключ, например shortsSize[0] и так далее.Вам нужно обновить массив как

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

или просто

const shirtsSize = [...this.state.shirtsSize];
   shirtsSize[index] = e.target.value
   this.setState({
      shirtsSize
    })
0 голосов
/ 12 октября 2018

Кажется, тебе нужно что-то вроде:

handleChange = index => e => {
  const {shirtsSize} = this.state
  shirtsSize[index] = e.target.value
  this.setState({shirtsSize: shirtsSize.slice()})
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...