如何在React Navigation中刷新

hel*_*eer 7 reactjs react-router react-native react-navigation

删除用户令牌后,用户会重定向到登录页面.但是,如果我与其他用户登录,主页面仍会显示以前的用户信息.

这是因为我没有刷新主页面.如何在反应导航中手动重新初始化(?)主页?

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')
Run Code Online (Sandbox Code Playgroud)

MainPage通过componentWillMount接收用户JSON数据

  componentWillMount() {
    // retrieve user data 
    this.props.retrieveCurrentUser(this.props.token);
  }
Run Code Online (Sandbox Code Playgroud)

以防您需要我的代码......

1)这是Root导航

const RootTabNavigator = TabNavigator ({
    Auth: {
      screen: AuthStackNavigator,
    },
    Welcome: {
      screen: WelcomeScreen,
    },
    Main: {
      screen: MainTabNavigator,
    },
  }, {
Run Code Online (Sandbox Code Playgroud)

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
});
Run Code Online (Sandbox Code Playgroud)

3)这是Main TabNavigator

export default TabNavigator(
  {
    Feed: {
      screen: FeedScreen,
    },
    Stylebook: {
      screen: StylebookScreen,
    },
    Wardrobe: {
      screen: WardrobeScreen,
    },
    Noti: {
      screen: NotificationScreen,
    },
    Menu: {
      screen: MenuScreen,
    },
  }, {
   ...
}
Run Code Online (Sandbox Code Playgroud)

dar*_*ala 18

如果您使用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>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

在您的情况下,当您导航到主页面时:

navigate('MainPage', { token: '<new token>' })}
Run Code Online (Sandbox Code Playgroud)

在MainPage中:

componentWillReceiveProps(nextProps) {
  if (nextProps.navigation.state.params.token) {
    this.props.retrieveCurrentUser(this.props.token);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 您在导航中传递的参数在componentWillReceiveProps和render中可用.你可以在那里使用它们(即使用你传递的新令牌在其中一个中调用retrieveUser) (3认同)
  • 真好!但是我认为我的问题不清楚。我从axios POST呼叫更新用户信息(props)。当MainPage呈现componentWillMount时,它不会再次运行(当然,它是在注销之前安装的)。如果我们收到来自您的解决方案的任何反应导航参数,是否可以强制安装一次? (2认同)