i18next 在异步内部更改语言导致内存泄漏

i18next change language inside async causes memory leak

我允许用户在应用程序中 select 一种语言,并将其存储在本地。当他们返回应用程序时,我尝试使用 AsyncStorage 来获取语言,但是当我调用

i18n.changeLanguage(currentLanguage)

它会导致内存泄漏。这是我的代码

const [language, setLanguage] = useState('') 
    const {t} = useTranslation();    
    const fetchLanguage =  async () =>{
        try{
            const currentLanguage = await AsyncStorage.getItem('language')
            if (currentLanguage === null ){
            }
            else{
                setLanguage (currentLanguage)
                i18n.changeLanguage(currentLanguage)
            }
        }catch (e){
            console.log(e)
        }
       
    }
    useEffect (()=>{
        fetchLanguage()
    }, [])

不要尝试在 useEffect 中使用 i18n.changeLanguage(currentLanguage),而是在初始化 i18next 时使用语言检测器。然后你可以有一个错误返回 language.The 这个答案归功于 Hend El-Sahli 的答案 here

const initialLanguage = 'en'

const languageDetector = {
  init: Function.prototype,
  type: 'languageDetector',
  async: true,
  detect: async callback =>{
    const storeLanguage = await AsyncStorage.getItem("language")
    const selectedLanguage = storeLanguage || initialLanguage
    callback(selectedLanguage)
  },
  cacheUserLanguage: () =>{}
}


i18n
  .use(initReactI18next) // passes i18n down to react-i18next
  .use(languageDetector)
  .init({
    resources: resources,
    compatibilityJSON: 'v3',
    fallbackLng:'en',
    interpolation: {
      escapeValue: false, // react already safes from xss
    },
});

export default i18n;