首页 > 解决方案 > 从任何组件外部更改语言环境(不使用 useSetLocale 挂钩)

问题描述

我正在将我的 react-admin 应用程序迁移到 v3。

它使用自定义 redux-saga 效果 ( USER_CHECK_SUCCESS) 来调用该changeLocale方法,但不再支持:https ://marmelab.com/blog/2019/10/10/react-admin-v3-i18n.html

问题是,我不知道如何重新实现它,我不能使用useSetLocale钩子,因为我没有在反应组件内部运行。

import {
    USER_LOGIN_SUCCESS,
    USER_CHECK,
    USER_CHECK_SUCCESS,
    changeLocale
} from "react-admin";

import {takeEvery, put} from "redux-saga/effects";

export default function* authSagas() {
    // takeEvery deprecated ? removed ? https://github.com/redux-saga/redux-saga/releases/tag/v1.0.0
    yield takeEvery(USER_LOGIN_SUCCESS, handleLanguage);
    yield takeEvery(USER_CHECK, handleLanguage);
    yield takeEvery(USER_CHECK_SUCCESS, handleLanguage);
}

export function* handleLanguage(action) {
    if(!localStorage.getItem('authenticated')){
        return;
    }
    const user = JSON.parse(localStorage.getItem('authenticated'));
    if(user.locale){
        // Should try/catch ? https://github.com/redux-saga/redux-saga/releases/tag/v1.0.0
        yield put(changeLocale(user.locale));
    }
}

标签: reactjsreact-admin

解决方案


推荐阅读