在 React 中实现自己的本地化引擎.js - 值得吗?



我决定使用 react 钩子编写自己的本地化引擎。 我不需要太多的本地化,只想根据所选区域设置显示消息。 我有一些关于性能等问题。

这是我的翻译组件,它只是通过给定键返回消息:

import React from 'react';
import useLocale from 'store/LocaleContext';
export default ({ k }) => {
const { messages } = useLocale();
const msg = messages[k] ? messages[k] : k;
return <>{msg}</>;
};

如您所见,它使用反应钩子,并且我在上下文提供程序中异步加载了消息。

我的应用程序是中型项目,因此我计划在其中使用 50-100 个或更多的<Translate k="messagekey" />组件。

如果如此多的组件订阅到一个提供大约 5-6 KB 数据的上下文,是否会影响我的应用性能?(我的意思是消息的大小约为 5-10KB(。

如果我忽略其他本地化问题(日期、时间、货币、数字......,仅用于消息(,使用此引擎而不是react-intlreact-i18n是否好?


编辑:

https://codesandbox.io/s/test-localisations-8kynz 这是示例代码沙盒链接。

您可以看到我创建的整个本地化文件。

我还添加了翻译函数,它不返回组件,而只返回翻译的消息。这样做是好的做法吗?

使用上下文时可能遇到的问题是,每次提供程序更新时,它都会呈现。每次组件渲染时,其子组件也会渲染(除非它们被记住(。

在您描述的情况下,我可以想到两种情况。

是否一次加载所有消息?

如果是这种情况,您将有一个初始渲染,在获取数据后进行另一个渲染。从这一点开始,数据不会更改,提供程序也不会触发新的呈现。

消息是否更新/添加多次?

在这种情况下,每次提供程序更新时,其所有子项都将呈现。如果有很多孩子并且没有记住,这可能是一个问题。

如果您的情况是第一个,我会测试在上下文中管理数据是否存在任何问题。

在第二种情况下,您可能需要考虑其他选项,例如使用 Redux 而不是上下文或您建议的库之一。

在这两种情况下,如果要在单个对象中管理大量信息,则可以考虑使用不同的上下文,并向应用的不同部分提供较小的数据集。

最新更新