Я думаю, что человек, который разместил оригинальный ответ, но удалил его, действительно имел правильную идею.Когда вы addNames
, вы добавляете строки.Массив имен состоит из строк, а не объектов.Таким образом, когда вы возвращаетесь к своей функции removeNames
, каждый элемент n
является строкой, а n.name
является undefined
(т. Е. n
- это имя, n.name
- ничто).Следовательно, n.name !== name
всегда будет истинным (т. Е. Каждое имя в массиве определено ).Вместо этого вы хотите просто сравнить n
с name
(n !== name
).
removeName = (e, name) => {
this.setState(prevState => ({
names: prevState.names.filter(elmName => elmName !== name)
}));
}
И в onclick:
<button
onClick={e => this.removeName(e, name)}>
</button>
И еще одна заключительная вещь для рассмотрения: этобудет работать только если имена являются уникальными.Если в массиве одинаковые имена, существует риск удаления более 1 элемента.Поэтому может быть желательно разработать схему обеспечения уникальности.Т.е. name + [это позиция в массиве] - быстрый и грязный способ, хотя есть и лучшие способы.