代码之家  ›  专栏  ›  技术社区  ›  merry-go-round

如何在React导航中刷新

  •  13
  • merry-go-round  · 技术社区  · 7 年前

    这是因为我没有刷新主页。如何重新初始化(?)在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')
    

    主页通过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
    });
    

    export default TabNavigator(
      {
        Feed: {
          screen: FeedScreen,
        },
        Stylebook: {
          screen: StylebookScreen,
        },
        Wardrobe: {
          screen: WardrobeScreen,
        },
        Noti: {
          screen: NotificationScreen,
        },
        Menu: {
          screen: MenuScreen,
        },
      }, {
       ...
    }
    
    1 回复  |  直到 3 年前
        1
  •  24
  •   daramasala    7 年前

    如果您使用flux或redux来管理您的状态,那么您将更新存储中的新状态(例如,新用户名和任何其他数据更改),所有内容都会得到更新。

    pass parameters in the navigate function

    这是链接文档中的示例:

    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>' })}
    

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