У вас все отлично, но вы правы, есть способ сделать это лучше, справиться с двумя пунктами истины сложно, поэтому у вас должен быть только один массив данных со словами, которые вам нужны, поэтомуВы должны фильтровать значения, создав переменную filter
в состояние для хранения текущего слова, которое нужно отфильтровать, поэтому вы должны добавить что-то вроде
// in the constructor function
constructor(props) {
super(props);
this.state = {
data: ["Adventure", "Romance", "Comedy", "Drama"],
filter: ""
}
}
// create a filter function
getFilteredResults() {
const { filter, data } = this.state;
return data.filter(word => String(word).toLowerCase().match(filter));
}
// and finally into your render function
render() {
return (
<div>
{this.getFilteredResults().map((word) => (
<div>{word}</div>
))}
</div>
);
}
Очевидно, не забудьте обновить функцию handleChange
,вот так
handleChange(e) {
const inputValue = e && e.target && e.target.value;
this.setState({ filter: inputValue });
//this.refineDataList(inputValue);
}
Таким образом, вы будете поддерживать только одну точку истины, она будет работать как положено.
Примечание: мы используем String(word).toLowerCase()
, чтобы гарантировать, что текущий word
на самом деле string
, поэтому мы можем избежать ошибки toLowerCase is not function of undefined
, если по какой-то причине слово не является строкой.