Partage
  • Partager sur Facebook
  • Partager sur Twitter

ReactNative accéder state dans navigationOptions

    5 juin 2018 à 9:47:27

    Bonjour à tous,

    J'ai besoin d'avoir accès au state dans mon navigationOptions, sauf que ce n'est pas possible sans bidouiller un peu de code apparemment, j'ai trouvé des solutions sur internet qui m'ont conseillé de faire ça :

    class HomePage extends Component {
      constructor(props){
        super(props);
        this.state = {
            titlePage: "ACCUEIL",
        }
        this.updateTitle = this.updateTitle.bind(this);
      }
    
      static navigationOptions = ({navigation, screenProps}) => {
        const params = navigation.state.params || {};
    
        return {
          headerLeft:  params.headerLeft,
          headerRight: params.headerRight,
        }
      }
    
      _setNavigationParams() {
        let headerLeft  = <BurgerMenu title={this.state.titlePage} />;
        let headerRight = <UserSide user="Martin Dupont" />;
    
        this.props.navigation.setParams({ 
          headerLeft,
          headerRight, 
        });
      }
    
      componentWillMount() {
        this._setNavigationParams();
      }
    
      updateTitle(title) {
        this.setState({titlePage: title});
      }
    
      render() {
        return (
          <NativeRouter>
            <ImageBackground style={st.component} imageStyle={{resizeMode: 'cover'}} source={ img_bckg } >
              <LeftBar changeTitle={(title) => this.updateTitle(title)} />
              <Route exact path='/' component={WidgetPage} />
              <Route path='/calendarpage' component={CalendarPage} />
            </ImageBackground>
          </NativeRouter>
        );
      }
    }
    
    export default withNavigation(HomePage);

    Du coup à l'arriver, mon title apparait bien ("ACCUEIL") sauf que lorsque je change la valeur du titre dans le state, celui ci ne se met pas à jour dans la barre de nav, il n'y a pas de re-render :euh:

    Merci pour votre éventuelle, future aide :D

    Bonne journée

    • Partager sur Facebook
    • Partager sur Twitter
      14 août 2018 à 16:18:55

      Salut,

      Tu as sûrement déjà résolu ton problème mais pour les prochains. 
      Tu utilises la bonne solution, il faut bien utiliser this.props.navigation.setParams pour faire passer des infos (comme celles du state) à ta navigation.

      Par contre effectivement, lorsque tu mets à jour ton state, la navigation n'est pas mise à jour. Pour cela il faut que, une fois ton setState terminé, rappeler this.props.navigation.setParams. En gros faire : 

      updateTitle(title) {
          this.setState({titlePage: title},
          () => { this._setNavigationParams() });
       }

      La navigation de React Navigation agît comme un component React Native. Ses paramètres sont stockés dans navigation.state.params. Donc en modifiant ses paramètres, tu modifies son state et celle-ci se re-rend avec le nouveau title ici.

      ++

      • Partager sur Facebook
      • Partager sur Twitter

      Développeur mobile : un peu d'Android, beaucoup de React Native et surtout de l'iOS. Cours React Native / Applications réalisées en React Native

      ReactNative accéder state dans navigationOptions

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown