【问题标题】:How to refresh in React Navigation如何在 React Navigation 中刷新
【发布时间】:2018-02-15 17:45:52
【问题描述】:

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

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

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,
    },
  }, {
   ...
}

【问题讨论】:

    标签: reactjs react-native react-navigation


    【解决方案1】:

    如果您使用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);
      }
    }
    

    【讨论】:

    • 不错!但我认为我的问题并不清楚。我从 axios POST 调用中更新用户信息(道具)。当 MainPage 呈现时,componentWillMount 不会再次运行(当然它是在注销之前挂载的)。如果我们收到任何反应导航参数(来自您的解决方案),我可以强制安装一次吗?
    • 您在导航中传递的参数在componentWillReceiveProps和render中可用。您可以在那里使用它们(即使用您传递的新令牌在其中一个中调用retrieveUser)
    • componentWillReceiveProps() 生命周期事件现已弃用。您应该改用 componentDidUpdate():reactjs.org/docs/…
    猜你喜欢
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    相关资源
    最近更新 更多