Пишу свой поиск по массиву, хочу изначально отображать массив таким какой он есть и потом при изменении value менять само отображение массива. Не понимаю почему он не отображается в принципе, явно что-то не так делаю, подскажите пожалуйста. В Реакте новичек, поэтому любая критика очень приветствуется, заранее благодарен.
Мой компонент Search:
import React, {Component} from 'react';
export default class Search extends Component {
constructor(props) {
super(props);
this.listItems = this.props.items;
}
state = {
value: ''
};
renderArr = (arr) => {
return <ul>
{arr.map((i, key) => {
return <li key={key}>{i}</li>
})}
</ul>
};
filterArr = e => {
const value = e.target.value.toLowerCase();
this.listItems = this.props.items.filter(item => {
return item.toLowerCase().includes(value);
});
console.log(this.listItems);
return this.renderArr(this.listItems);
};
componentDidMount() {
this.setState({
value: this.search.value
});
}
render() {
return (
<div className="">
<input type="text"
ref={input => this.search = input}
onChange={this.filterArr}
/>
</div>
)
}
}
Проблему решил записав полученный в props массив в state, но не знаю насколько это правильно...
import React, {Component} from 'react';
export default class Search extends Component {
constructor(props) {
super(props);
this.listItems = this.props.items;
}
state = {
value: '',
arr: []
};
renderArr = (arr) => {
return <ul>
{arr.map((i, key) => {
return <li key={key}>{i}</li>
})}
</ul>
};
filterArr = e => {
const value = e.target.value.toLowerCase();
this.setState({
arr: this.props.items.filter(item => {
return item.toLowerCase().includes(value);
})
})
};
componentDidMount() {
this.setState({
value: this.search.value
});
}
componentWillMount() {
this.setState({
arr: this.props.items
})
}
render() {
return (
<div className="">
<input type="text"
ref={input => this.search = input}
onChange={this.filterArr}
/>
{this.renderArr(this.state.arr)}
</div>
)
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочу использовать тег <video> с параметром autoplay, но на смартфонах не работаетКроме того на JavaScript метод
Проблема заключается в том, что когда окно браузера находится в неактивном состоянии не делать переадресацию или если браузер поддерживает...
Мне нужно что бы при клике на какой то блок, сработал trigger('click') на другой классПочему этот код не работает в мобильных браузерах? https://jsfiddle