web-dev-qa-db-ja.com

Reactナビゲーションで更新する方法

ユーザートークンを削除すると、ユーザーはログインページにリダイレクトされます。ただし、他のユーザーでログインしても、メインページには以前のユーザー情報が表示されます。

これは、メインページを更新しなかったためです。反応ナビゲーションでメインページを手動で再初期化するにはどうすればよいですか?

MainPage(Logged in as 'matt') -> Logout -> LoginPage 
-> (here I want to refresh MainPage so it can be loaded once new user login) 
-> MainPage(Should be logged in as other user 'kobe')

MainPageはcomponentWillMountを介してユーザーJSONデータを受信します

  componentWillMount() {
    // retrieve user data 
    this.props.retrieveCurrentUser(this.props.token);
  }

あなたが私のコードを必要とする場合に備えて...

1)これはルートナビゲーションです

const RootTabNavigator = TabNavigator ({
    Auth: {
      screen: AuthStackNavigator,
    },
    Welcome: {
      screen: WelcomeScreen,
    },
    Main: {
      screen: MainTabNavigator,
    },
  }, {

2)これはAuth Stack Navigator(ログインページ)です

export default StackNavigator ({
  Autho: {
    screen: AuthScreen,
  },
  SignUp: {
    screen: SignUpScreen,
  },
  SignUpBio: {
    screen: SignUpUserBioScreen,
  },
  SignUpUsername: {
    screen: SignUpUsernameScreen,
  },
}, {
    header: null,
    headerMode: 'none',
    navigationOptions: {
      header: null
    },
    lazy: true
});

3)これはメインTabNavigatorです

export default TabNavigator(
  {
    Feed: {
      screen: FeedScreen,
    },
    Stylebook: {
      screen: StylebookScreen,
    },
    Wardrobe: {
      screen: WardrobeScreen,
    },
    Noti: {
      screen: NotificationScreen,
    },
    Menu: {
      screen: MenuScreen,
    },
  }, {
   ...
}
7

状態を管理するためにfluxまたはreduxを使用する場合、ストア内の新しい状態(新しいユーザー名やその他のデータの変更など)を更新すると、すべてが更新されます。

状態管理ソリューションを使用しない場合は、 navigate関数のパラメーターを渡す を使用できます。したがって、ログイン後にメインページに移動するときは、フラグまたはメインページに更新の必要性を知らせるものを渡します。

これは、リンクされたドキュメントの例です。

class HomeScreen extends React.Component {
  static navigationOptions = {
    title: 'Welcome',
  };
  render() {
    const { navigate } = this.props.navigation;
    return (
      <View>
        <Text>Hello, Chat App!</Text>
        <Button
          onPress={() => navigate('Chat', { user: 'Lucy' })}
          title="Chat with Lucy"
        />
      </View>
    );
  }
}

class ChatScreen extends React.Component {
  // Nav options can be defined as a function of the screen's props:
  static navigationOptions = ({ navigation }) => ({
    title: `Chat with ${navigation.state.params.user}`,
  });


  render() {
    // The screen's current route is passed in to `props.navigation.state`:
    const { params } = this.props.navigation.state;
    return (
      <View>
        <Text>Chat with {params.user}</Text>
      </View>
    );
  }
}

そして、あなたの場合、メインページに移動すると:

navigate('MainPage', { token: '<new token>' })}

mainPageの場合:

componentWillReceiveProps(nextProps) {
  if (nextProps.navigation.state.params.token) {
    this.props.retrieveCurrentUser(this.props.token);
  }
}
18
daramasala