У меня такое состояние:
state = {
val: '',
input: [{
id: uuid.v4(),
questionLabel: 'Question',
text: '',
typeLabel: 'Type',
conditionLabel: 'Condition',
types: [
{value: '', name: ''},
{value: 'Text', name: 'Text'},
{value: 'Number', name: 'Number'},
{value: 'Yes / No', name: 'Yes / No'}
],
subInput: []
}],
}
И эта функция:
textChangeHandler = event => {
const text = this.state.input.map(currency => {
const test = currency.text = event.target.value;
return {...currency, text: test}
});
this.setState({text})
}
И я хочу изменить состояние на входе, свойство: text
Но если я ввожу вводимый текст, он не работает, я не могу вводить ввод, и состояние не меняется. Как я могу исправить эту функцию?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это потому, что вы напрямую мутируете состояние. И изменение состояния в приложении React не допускается. Вот что вы можете сделать здесь:
textChangeHandler = (event, inputIndex) => {
const test = [...this.state.input] // first, clone the input state
// now, you can update the text
test[inputIndex].text = event.target.value
this.setState({
input: test // test is now whole updated input array
})
}
Уведомление: вам нужно передать индекс в свой обработчик, чтобы он знал, какой из них изменить.
Если вам понравилось ниже:
textChangeHandler = event => {
const test = [...this.state.input]
test.forEach(t => t.text = event.target.value)
// but wait, event.target.value?
// this will change all the input with the same value
this.setState({
input: test
})
}
Таким образом, лучше обновлять значение с помощью индекса.
Это тоже не работает, у меня такая же проблема с вашим решением, я не могу ничего писать во вводе и его расфокусировка, если я нажимаю букву на клавиатуре ... Состояние меняется, но есть только одна буква, а не полные слова или предложения. :(