React Native-如何更新已经安装的组件上的屏幕

时间:2018-11-27 15:55:48

标签: react-native react-props

我有2个屏幕:

  • 主屏幕
  • 登录屏幕

我的进入点是我的主屏幕,如果我已登录(获取数据),请先注销,然后再登录到另一个帐户。由于已经安装了Home组件,因此不会更新我的数据,并且不会再次调用this.getDatas()。我找不到解决方案,我想我需要在Home.js中使用“ ComponentWillUpdate”来调用this.getDatas()或类似的方法,但是您找不到解决方案。

这是我的代码:

Home.js

python -m rasa_core.run -d models/dialogue -u models/nlu/current --port 5002 --credentials credentials.yml

Login.js

  componentDidMount = async () => {
    const { navigation } = this.props;
    if (!await AsyncStorage.getItem('auth')) {
      navigation.navigate('Login');
    } else {
      this.getDatas();
    }
  }

  getDatas() {
    axios.get(`${apiUrl}/me`).then((res) => {
      this.setState({
        datas: res.data.datas,
      });
    }).catch((err) => {
      console.warn(err);
    });
  }

App.js

export default class Login extends Component {
  constructor(props) {
    super(props);
    this.state = {
      email: null,
      password: null,
    };
  }

  logIn() {
    const { email, password } = this.state;
    axios.post(`${apiUrl}/auth`, {
      email,
      password
    }).then((res) => {
      navigation.navigate('Home');
    }).catch((err) => {
      console.warn('Error:', err);
    });
  }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

对于应用程序中的身份验证流程,应考虑使用react-navigation中的 Switch Navigator 。因此,一旦您退出应用程序并登录后,应用程序屏幕就会弹出内存,因此当您重新登录时,componentDidmount将再次被触发。