2016-07-05 4 views
0

Я новичок в реакции + поток. Я немного смущен тем, когда и как происходит повторный рендеринг, когда событие отправляется магазинами. В моем приложении я слушаю событие в функции componentWillMount(), которая вызывается непосредственно перед рендерингом happpens. Он отлично работает, и мои взгляды обновляются. Я только раз забочусь о том, что заставляет мой компонент повторно отображать. Ниже приведены коды.Когда и как происходит повторный рендеринг, когда магазины генерируют любое событие в потоке?

функции для обновления магазина

createTodo(text){ 
const id = Date.now(); 
this.todos.push({ 
    id, 
    text, 
    complete:false 
}); 

this.emit("change"); 

Моего компонента - метод слушателя.

componentWillMount(){ 

TodoStore.on("change",() => { 
    this.setState({ 
     todos: TodoStore.getall() 
    }) 
}) 
} 

Вот что вызывает мой компонент для повторной визуализации? Не могли бы вы объяснить мне подробно.

ответ

2

Каждый раз, когда вы вызываете setState, компонент будет повторно рендер.

См: https://facebook.github.io/react/docs/component-api.html

SetState() всегда будет вызывать повторно вынести, если условная логика рендеринга не реализуется в shouldComponentUpdate(). Если используются изменяемые объекты и логика не может быть реализована в shouldComponentUpdate(), вызов setState() только тогда, когда новое состояние отличается от предыдущего состояния, позволит избежать ненужных повторных рендерингов.

+0

Как я вызываю setState в компонентеWillMount. Первый раз рендеринг компонента «setState» будет вызываться непосредственно перед тем, как произойдет рендеринг. Я спрашиваю, что вызовет функцию componentWilMount снова? Я верю только, что setState будет вызван снова? Исправьте меня pls – scripter

+0

см: https://facebook.github.io/react/docs/component-specs.html Так компонентWillMount вызывается один раз, когда компонент монтируется в DOM. Если у вас несколько одинаковых компонентов, тогда будет несколько вызовов. TodoStore.on («change») является асинхронным (слушателем), поэтому он не будет немедленно изменять состояние. Вы также можете попробовать уменьшить вместо потока. – Hardy

1

Всякий раз, когда вы вызываете setState() в приложении для реагирования, он вызывает визуализацию состояния. В основном каждый раз, когда состояние изменяется, ваша функция рендеринга внутри вашего реагирующего компонента будет выполнена, и ваш пользовательский интерфейс будет отражен в новых изменениях.