@TjLink

React.js Не обновляется содержимое на сайте при добавлении элемента в массив. Почему?

Делаю простенькую ToDo'шку на React.js с фильтром
Когда нажимаю на "ОК", в массив "users" добавляется новый элемент.
Но на сайте не обновляется и не появляется новый элемент.
Появляется только тогда, когда в строку поиска начинаю писать имя, потом всё стираю и вот тогда появляется
Почему и как исправить?
var users = [
  {
    id : 1,
    name : 'Piter',
    done : false
  },
  {
    id : 2,
    name : 'Mikle',
    done : true
  }
  ]


  class Search extends React.Component{
    state = {
    }
    change = (e) => {
      var newText = e.target.value.trim();
      this.props.filter(newText);
    }
    render(){
      return (
        <div>
          <input type="text" onChange={this.change} />
        </div>
      )
    }
  }




  class Item extends React.Component {
    state = {
    }
    render(){
      return <h1>{this.props.data.name}</h1>
    }
  }



  class App extends React.Component {
    state = {
      people : this.props.data
    }
    filterList = (newText) =>{
      var newMass = this.props.data.filter(function(user){
        return (user.name).toLowerCase().search(newText.toLowerCase()) !== -1;
      })
      this.setState({people : newMass})
    }
      press = () => {
      users.push({id: 3, name: 'Hello', done: false})
      console.log(users);
    }
    render(){
      return(
        <div className="mainBlock">
        <button type="submit" onClick={this.press}> OK </button>
        <Search filter={this.filterList}/>
          {
            this.state.people.map(function(user){
              return <Item key={user.id} data={user} />
            })
          }
        </div>
      )
    }
  }
  ReactDOM.render(<App data={users}/>, document.getElementById('root'))
  • Вопрос задан
  • 2312 просмотров
Решения вопроса 1
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
потому что ты добавляешь в массив users, который не является свойством внутри state. Соответственно у тебя state не меняется, поэтому реакт не обновляет компонент, нужно изменить state.
this.state.people.push() // пушить сюда
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы