Опираясь на то, что @ Mayank-Шукла писал (случай 2: зная индекс элемента замены), это также может быть написана с Array.splice:
const replacement = 'B';
let copy = [...this.state.ids]
copy = copy.splice(index, 1, replacement)
this.setState({
ids: copy,
})
REPL Example
Две вещи отметить здесь:
Array.splice
- mutative; Он изменит массив, на котором он работает, но это мелкая копия массива из-за оператора распространения. Подробнее об этом ниже.
- Вы не можете напрямую назначить результат сращивания, так как возвращаемое значение
Array.splice
фактически является удаленными элементами. AKA: Не назначайте результат вашего среза переменной, которую вы собираетесь назначать идентификаторам в setState
, или вы получите только удаленные значения.
Чтобы следить за неглубокие против глубоких копий из пункта 1, обратите внимание, что при замене ссылок на объекты (против строковых литералов в вопросе), вам нужно будет использовать что-то вроде lodash's cloneDeep.
Есть, однако, handful of other ways around this.
Вы также можете узнать больше о мелководье и глубине на SO itself.
Я думаю, что смысл этой строки заключается в следующем: 'this.state.a = 'a'', не меняет значения переменной состояния напрямую. ** обрабатывать this.state, как если бы он был неизменным **, всегда используйте 'setState' для изменения значений состояния. исправьте меня, если я ошибаюсь ?? –
Массивы - это объекты в JS, поэтому они передаются * * reference * * (без проблем, если вы устанавливаете ключ состояния с новой строкой). Но изменение одного и того же массива/объекта из 'this.state' изменит один и тот же внутренний объект. – mrlew
ohh, получил смысл спасибо :) –