2014-10-11 2 views
3

У меня есть глобальный объект data, который я обновляю, а затем снова вызываю React.renderComponent() в верхнем/главном компоненте.Лучший образец для ретрансляции моего реагирующего компонента?

Это правильный шаблон для запуска обновления? Я немного потерян. Благодаря!

ответ

4

Обычно следует передать объект данных в компонент в качестве опоры, даже если это глобальная переменная. Это позволяет протестировать компонент, а также использовать его в другом месте, не привязавшись к этому глобальному.

Как сказал Майк, нет ничего плохого в использовании React.renderComponent для его обновления.

Он также упомянул флюс, но это слишком много для этого. Простой эмитент событий, где вы делаете что-то вроде .emit('change', newData), и компонент, который прослушивает событие изменения, как правило, лучше для более простых случаев. См. Мой answer to this question для примера того, как это можно сделать.

3

Это правильный рисунок. React.renderComponent будет либо установить компонент в первый раз, либо получить уже смонтированный компонент до обновление.

Если вы используете глобальный объект, хотя, вы можете посмотреть в к Flux архитектуры здесь:

http://facebook.github.io/flux/docs/overview.html

+0

А, ок. Большой! благодаря – boom

0

У меня была такая же проблема, и я спросил себя, действительно ли мне нужно переделать компонент.

Вы можете сделать это с помощью this.forceUpdate(), но это не рекомендуется. Как React docs states:

Вы должны стараться избегать всех видов использования forceUpdate() и только для чтения из this.props и this.state в визуализации(). Это делает ваш компонент «чистым», а ваше приложение намного проще и эффективнее.

Так что я сделал создать data свойство как exists и проверить:

// renderDeleteButton() is being called on render() 
renderDeleteButton() { 
    if (!this.props.store.exists) { 
    return; 
    } 

    return(
    <DeleteButton 
     ... 
     deleteAction={this.delete} /> 
); 
} 

Всякий раз, когда я удалить/сохранить, я переключать exists и компонент будет отображаться или скрывать в зависимости от этого. Реагирует это для меня.

Смежные вопросы