Я пытаюсь создать раскрывающийся список с множественным выбором с помощью Semantic UI и React, который динамически выбирает данные из API. Ему успешно удается извлечь данные, но когда я снова ищу те же данные, он снова добавляет их в список параметров, и я получаю консольную ошибку «два ребенка с одним и тем же ключом».
Iдобавлено исключение «if (! this.state.options.include (e))», но, по-видимому, это не помогает.
Я также попытался циклически просмотреть текущие полученные данные и предыдущее состояние и сопоставитьИдентификаторы сопоставляются друг с другом, чтобы предотвратить заполнение одних и тех же значений, но с этой стратегией тоже не повезло.
getOptions = () => {
if(this.state.searchQuery) {
this.setState({isFetching:true})
axios.get('URL', {
params: {
query: this.state.searchQuery,
api_key: KEY
}
})
.then( (response) => {
this.setState((prevState)=>({
options: [
...response.data.results.map( (e) => {
if (!this.state.options.includes(e)) {
return {
key: e.id,
text: e.name,
value: e.id
}
}
})
, ...prevState.options]
}), () => this.setState({isFetching:false}))
}).catch(function () {
return
})
}
}
handleChange = (e, { value }) => {this.setState({ value })}
handleSearchChange = (e, { searchQuery }) => {
this.setState({ searchQuery }, () => {this.getOptions()}
)}
render() {
const { options, isFetching, search, value } = this.state
return (
<Grid>
<Grid.Column width={5}>
<Dropdown
fluid
onAddItem={this.handleAddition}
selection
multiple
search={search}
options={options}
value={value}
placeholder="Search keywords"
onChange={this.handleChange}
onSearchChange={this.handleSearchChange}
disabled={isFetching}
loading={isFetching}
/>
</Grid.Column>
</Grid>
)
}
Я бы хотел, чтобы меню параметров не добавляло те же результаты поиска в список параметров, который ужекогда я снова ищу те же данные.