https://codesandbox.io/s/4x9lw9qrmx
removeSelectedValue = index => {
console.info("removeSelectedValue--->", index);
let seletedValues = this.state.queryComponents;
seletedValues.splice(index, 1);
console.info("spliced Values--->", seletedValues);
this.setState({ queryComponents: seletedValues });
};
render() {
let queryComp = this.state.queryComponents.map((value, index) => {
return (
<AutoCompleteComponent
key = {index}
value = {value}
index = {index}
valueSelected = {this.getSelectedValue}
removeSeleted = {this.removeSelectedValue}
/>
);
});
return <div>{queryComp}</div>;
}
Когда делаешь let seletedValues = this.state.queryComponents;
вы создаете ссылку на эту переменную вместо того, чтобы делать копию.
Вам нужно убедиться, что вы заменили свое состояние новым объектом / массивом, чтобы произошел повторный рендеринг.
Пожалуйста, попробуйте это:
removeSelectedValue = index => {
this.setState(prevState => ({
queryComponents: prevState.seletedValues.filter((a, i) => (i !== index));
});
};
Эта функция фильтра эквивалентна используемой вами сварке, но возвращает новый массив вместо изменения исходного.
С другой стороны, я передаю setState
функцию, которая использует prevState
, делая код короче.
эй, я обновил ваш код в песочнице, но все еще сталкиваюсь с проблемами :( codeandbox.io/s/4x9lw9qrmx