首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >父包中的react-intl提供程序

父包中的react-intl提供程序
EN

Stack Overflow用户
提问于 2022-07-04 05:36:41
回答 1查看 191关注 0票数 1

我有一个react项目"App“,它需要另一个包"AppComponents”,而后者又需要"UI“包。

应用程序(有Intlprovider) => AppComponents (useIntl works) => UI (useIntl不工作)

我在"App“中添加了Intl提供程序,当我在"AppComponents”包中使用钩子“AppComponents”时,它工作得很好。但是,当我在"UI“包中使用这个钩子时,它不起作用,说没有提供者:

未明错误: React无法找到所需的intl对象。需要在组件祖先中存在。

我在用:

react intl v6.0.4

反应v18.0.0

节点v18.0.0

npm v8.6.0

“应用程序”:

代码语言:javascript
复制
import { useMemo, useState, createContext } from 'react';
import { IntlProvider } from 'react-intl';
import { ReactNode } from 'react';
import { MessageFormatElement } from 'react-intl';

export type TTranslationData = Record<string, string> | Record<string, MessageFormatElement[]>;

export interface II18nContext {
    locale: string;
    setLocale: (newLocale: string) => void;
    setTranslation: (data: TTranslationData) => void;
}

export interface II18nProviderProps {
    children: ReactNode;
}

const I18nContext = createContext<II18nContext | null>(null);

function I18nProvider({ children }: II18nProviderProps) {
    const [locale, setLocale] = useState(navigator.language);
    const [message, setMessage] = useState<TTranslationData | Record<string, never>>({});

    const value = useMemo(
        () => ({
            locale,
            setLocale,
            setTranslation: (data: TTranslationData) => setMessage(data),
        }),
        [locale],
    );

    return (
        <I18nContext.Provider value={value}>
            <IntlProvider locale={locale} messages={message}>
                <App />
            </IntlProvider>
        </I18nContext.Provider>
    );
}

"UI“包(不起作用):

代码语言:javascript
复制
import { useIntl } from 'react-intl';

...
function Searchbar(props: SearchbarProps) {
    const intl = useIntl();

    ...
    return (
        ...
        {intl.formatMessage({
            id: 'searchbar.placeholder',
            description: 'React UI search bar placeholder',
            defaultMessage: 'Search',
        })}
        ...
    );
    ...
}

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-07-04 05:54:44

我不知道为什么,但在我删除了vite缓存并使用了npm链接之后,它现在起作用了。非常奇怪,但在使用windows进行开发时,什么是新的:p

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72852165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档