1

因此,当我从第二个屏幕返回时,我一直在尝试从屏幕中的 asyncStorage 重新加载内容,但它只会在我来回导航时刷新

这是我的代码

componentDidMount() {
        const {navigation} = this.props
        navigation.addListener('focus', () => {
           
            AsyncStorage.getItem('Servers').then((servers) => {
                servers = JSON.parse(servers);
                if (servers) {
                    return this.setState({servers:servers, loaded: true})

                }
                this.setState({servers: [], loaded: true});

            });
            
        });

    };

另外,我认为每次完成 setState 时都应该重新渲染,但由于某种原因它没有这样做

4

2 回答 2

0

这是预期的行为...因为您只为焦点事件注册了一个侦听器...。直接在 componentDidMount 中执行 addListener 的回调...

componentDidMount() {
  const {navigation} = this.props;
  
  yourFocusHandler();
  this.unsubscribe = navigation.addListener('focus', yourFocusHandler);

};

componentWillUnmount() {
  this.unsubscribe();
}
于 2021-02-17T21:12:35.457 回答
0

这是我更改后的代码:

focusHandler(){
        AsyncStorage.getItem('Servers').then((servers) => {
            servers = JSON.parse(servers);
            if (servers.length) {
                return this.setState({servers, carregado: true})
            }

            this.setState({carregado: true});

        });
    }

    componentDidMount() {
        const {navigation} = this.props
        this.focusHandler();
        navigation.addListener('focus', this.focusHandler());

    };

它给出了以下错误: 在此处输入图像描述

于 2021-02-18T14:44:38.673 回答