1

我有两个页面,在“login.js”和“main.js”文件中进行了描述。当用户登录时,我必须根据用户在其注册配置文件中存储的语言设置主页语言。我已检查_storeData我的方法I18n.locale是否正确设置为用户选择的语言。但在“main.js”中,内容没有改变。如何解决?

登录.js

class Login extends React.Component {

    constructor(props) {
        super(props);
    }
    async login() {
        this._storeData(this.props.login.getLogin, this.props.login.lPassword)
    }
    _storeData = async (user, password) => {
        try {
            await AsyncStorage.setItem('user', JSON.stringify(user))
            await AsyncStorage.setItem('password', password)
            I18n.locale = user.language;

        } catch (error) {
            console.log(error)
        }
    }
}

main.js

import I18n from '../../translations/i18n';

class Main extends Component {
    constructor(props) {
        super(props)
        this._retrieveData()
    }
    _retrieveData = async () => {
        try {
            const value = await AsyncStorage.getItem('user');
                this.props.editUser(JSON.parse(value))
        } catch (error) {
            console.log(error)
        }
    }

    render() {
        return (
            <View style={styles.container}>
                <Text style={styles.menutext}>{I18n.t('company')}</Text>
            </View>
        )
    }
}
4

1 回答 1

0

如果语言环境有可能随时间改变,请尝试_retrieveData不要从构造函数调用方法,而是从生命周期方法调用方法,componentDidMount甚至在生命周期方法中调用方法。componentDidUpdate现在,由于您从构造函数调用它,它发生在挂载之前,因此它使用的数据可能已经过时。

于 2019-07-03T09:55:42.417 回答