gatsby - 添加 gatsby-plugin-layout 后,injectIntl 导致错误
问题描述
为了翻译我的网站,我intl
在 layout.js 文件中注入了这样的内容:
import React from "react";
import { injectIntl } from "gatsby-plugin-intl";
const Layout = ({intl}) => (
{intl.formatMessage({id: "history_text"})}
);
export default injectIntl(Layout)
但是在我添加gatsby-plugin-layout
到我的项目之后(基于这个例子)我得到了这个错误:
Error: [React Intl] Could not find required `intl` object. <IntlProvider> needs to exist in the component ancestry.
如何在保留翻译的同时摆脱此错误?
这是相关的 gatsby 配置部分:
{
resolve: `gatsby-plugin-intl`,
options: {
path: `${__dirname}/src/locale`,
languages: [`en`, `de`],
defaultLanguage: `de`,
redirect: false,
},
},
{
resolve: `gatsby-plugin-layout`,
options: {
component: require.resolve(`./src/components/layout.js`),
},
},
解决方案
gatsby-plugin-layout
并且gatsby-plugin-intl
都使用wrapPageElement
API 来创建包装器。
现在 gatsby 中的插件是自上而下执行的,因此您需要在gatsby-plugin-layout
之前定义,gatsby-plugin-intl
以便IntlProvider
gatsby-plugin-intl 使用的提供程序包装 Layout 组件并且它能够使用 injectIntl HOC
{
resolve: `gatsby-plugin-layout`,
options: {
component: require.resolve(`./src/components/layout.js`),
},
},
{
resolve: `gatsby-plugin-intl`,
options: {
path: `${__dirname}/src/locale`,
languages: [`en`, `de`],
defaultLanguage: `de`,
redirect: false,
},
},
推荐阅读
- tkinter - Tkinter - 无法弄清楚为什么在 2 个输入框中同时输入数据
- java - 如何在 kotlin 或 java 中计算祈祷时间?
- jquery - 转发流响应
- python - 停止程序时是否抛出异常?
- c++ - 如何在c ++中将段落向右对齐?
- yaml - 如何在 Azure 管道中使用 npm link 命令
- sql - 如何将 JSON 键值读取为 Snowflake 中的数据列?
- python - AttributeError:“模块”对象没有属性“spawn”
- python - pygame图像未显示
- spring - NoSuchMethodError:org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()