2016-05-26 1 views
0

Я использую Реагировать компонент Native Navigator, и я маршрутизации настроить с методом renderScene:Реагировать Native Navigator, проблемы с вызовом функции в пределах RenderScene

<Navigator 
    ref="navigator" 
    initialRoute={{name:'Main'}} 
    renderScene={(route,navigator)=>this.renderScene(route,navigator)} /> 

Тогда, в моем renderScene, я хочу позвонить внешний метод, toggleSideMenu, как показано ниже:

toggleSideMenu() { 
    this.setState({ 
     menuDisableGestures: false 
    }); 
} 

renderScene(route, navigator) { 
    switch (route.name) { 
     case "SecondView": 
     this.toggleSideMenu.bind() 
     return <SecondView navigator={navigator} /> 
.... 

Однако toggleSideMenu никогда не вызывается. И если я изменить вызов от this.toggleSideMenu.bind() к this.toggleSideMenu(), я получаю сообщение об ошибке с указанием:

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

Любые идеи о том, как я могу вызвать внешнюю функцию изнутри renderScene?

ответ

1

Вы можете вызвать функцию из функции renderScene без каких-либо проблем. Использование this.toggleSideMenu(); Но что вы здесь делаете, вы обновляете состояние в функции toggleSidemenu.

Как объяснено в this,

Вопрос заключается в том, что SetState вызовет повторный рендеринг (потенциально, в зависимости от shouldComponentUpdate). Если у вас был вызов setState внутри функции render, это вызовет еще один рендер. Вероятно, вы закончите бесконечный цикл повторных визуализаций. Нет ничего, что помешало бы вам использовать setState в результате некоторой асинхронной операции (на самом деле это очень часто). Это нормально, пока это не в рендере или каком-либо другом методе жизненного цикла компонента, который запускается при обновлении состояния (shouldComponentUpdate является другим, так как вы закончите с бесконечным циклом таким же образом).

Так что если вы удалите setState из toggleSidemenu, тогда функция будет выполнена без каких-либо проблем.

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