Перенаправление не работает на componentWillMount ()act-native-router-flux - PullRequest
0 голосов
/ 17 декабря 2018
componentWillMount() {
    var user = UserService.findAll();
    if (user.length > 0) Actions.home();
  }

где 'home' - это Scene ключ в моем router.js.

С другой стороны *

    onButtonPress() {
        var user = UserService.findAll();
        if (user.length > 0) Actions.home();
      }

работал как шарм!

Мой router.js

const RouterComponent = () => {
  return (
    <Router showNavigationBar={false}>
      <Stack key="root">
        <Scene key="auth" hideNavBar={true}>
          <Scene key="login" component={Login} />
        </Scene>

        <Scene key="home" component={Home} hideNavBar={true}/>
        <Scene key="pdf" component={Pdf} hideNavBar={true} />
      </Stack>
    </Router>
  );
};

export default RouterComponent;

Ответы [ 2 ]

0 голосов
/ 04 января 2019

on реквизиты сделали свое дело для меня

Мне нужна условная навигация, поэтому я использовал success и failure атрибуты с именами сцен для навигации

Я отправляю своикод ниже, надеюсь, это поможет кому-то

<Scene
    key="login"
    component={Login}
    on={() => UserService.findAll().length > 0}
    success={()=>
       Actions.replace("home")
    }  
    failure="login"
/>
0 голосов
/ 24 декабря 2018

Хорошо, я могу предположить, что вы пытаетесь получить или проверить локальное хранилище для пользовательских данных в вашем UserService.То, что я бы предложил, это не пытаться остановить рендеринг или «монтирование» компонента с помощью ловушки жизненного цикла componentWillMount.Вместо этого вы можете визуализировать ActivityIndicator, пока UserService.findAll() находит пользователя (управляется состоянием), поскольку вы не хотите, чтобы компонент отображался, пока UserService не завершит процесс поиска пользователя.

что-то вроде этого

В вашем конструкторе присвойте значение, которое будет использоваться для визуализации ActivityIndicator или компонента (я предполагаю, что компонент login).Давайте назовем это searching например:

// in your constructor
this.state = {
  searching : true;
}

// assuming it is an async function
async componentWillMount(){
  var user = await UserService.findAll();
  if (user.length > 0) {
    Actions.home({type : ActionConst.REPLACE}); // no need to update the state here as we will navigate to another screen resetting the navigation stack
  }else {
    this.setState({
      searching : false
    });
  }
}

// other methods etc

render(){
  return this.state.searching ? <ActivityIndicator /> : <Login />
}

конечно, это резюме метода рендеринга, но вы получите суть:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...