useTranslation 和直接从 i18next 导入的区别

问题描述 投票:0回答:1

导入

useTranslation
钩子,然后从中获取
t()
函数有什么实际区别吗:

import { useTranslation } from 'react-i18next';

// Inside a component:
const { t } = useTranslation();

并直接从

t()
导入
i18next
函数:

import { t } from 'i18next';
reactjs i18next react-i18next
1个回答
0
投票

是的,这两种方法之间存在实际差异:

1.
useTranslation()
来自
react-i18next
:

import { useTranslation } from 'react-i18next';

const { t } = useTranslation();
  • React Context:这个钩子是为React组件设计的。它确保
    t
    函数绑定到当前的 React 上下文,这意味着它负责处理特定于上下文的语言设置,例如可能在应用程序生命周期中更改的当前语言或命名空间。
  • 自动更新:如果使用
    i18next.changeLanguage()
    更改语言,组件将自动使用新翻译重新渲染。
  • 命名空间:如果您的项目使用不同的命名空间进行转换(例如,
    'common'
    'footer'
    ),则该挂钩可以在组件级别提供在它们之间切换的灵活性。
  • SSR 支持:此方法最适合服务器端渲染(SSR),可以确保翻译在服务器端和客户端上正确加载。

2. 直接从
i18next
导入:

import { t } from 'i18next';
  • 无 React 集成:这种方法直接使用
    i18next
    实例。它与 React 上下文没有任何连接,因此当语言发生变化时它不会重新渲染组件。
  • 静态翻译
    t
    功能是静态的,如果语言发生变化,不会触发重新渲染。当您需要在 React 组件之外或非 React 代码中进行翻译时,它非常有用。
  • 命名空间和上下文:由于它没有与 React 的上下文集成,因此您可能需要手动处理诸如设置或切换命名空间以及确保更新翻译之类的事情。

总结:

  • 在 React 组件中使用
    useTranslation()
    进行动态翻译,当语言更改时更新。
  • 当您位于 React 组件之外或不需要组件在语言更改时重新渲染时,请使用直接
    t
    导入。
© www.soinside.com 2019 - 2024. All rights reserved.