2016-04-23 3 views
0

Это вопрос производительности и лучшей практики.Одновременно setState и Change Scene

В настоящее время у меня есть дочерний компонент, которому необходимо изменить состояние его родителя и выполнить запрос AJAX для родителя. Когда нажата TouchableHighlight, дочерняя сцена должна вернуться назад, а родительское состояние должно изменить/выполнить запрос ajax.

Я использую React Native Router Flux для моей навигации.

Это лучший способ выполнить это, чтобы передать необходимые изменения состояния через опоры обратно к родительскому элементу, например. Действия.feed ({foo: bar})?

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

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу изменить родительское состояние и сменить сцены одновременно с тем, как родитель все еще монтируется, и вы не можете установитьState на компонент для установки. Есть ли способ сделать это с помощью обещания из родительского метода, который может быть возвращен после завершения setState, в какой момент я могу сменить сцену? Не знаете, как это сделать или даже если это лучший метод.

Любая помощь будет оценена по достоинству.

ответ

1

Общая практика заключается в обеспечении обратного вызова дочернего компонента. Например:

export default class Child extends Component{ 
    render(){ 
     return (<TouchableHighlight onPress={this.props.onItemClicked}> 
      .... 
     </TouchableHighlight>); 
} 

export default class Parent extends Component{ 
..... 
    onItemClicked(){ 
     //ajax request, set state 
    } 
} 

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

+0

Спасибо! Я буду использовать метод метода. – efru