带有 Gatsby 的 Redux - 无法识别包装的提供程序
Redux with Gatsby - wrapped Provider is not recognized
我一直遇到错误
could not find react-redux context value; please ensure the component is wrapped in a <Provider>
即使我已经将根文件包装在 <Provider>
中。我怀疑可能有什么问题是,嵌套组件不是包裹在 <Provider>
中,而是包裹页面的“Link”?
我的 index.tsx 文件看起来像这样
<Provider store={reduxStore}>
<Layout>
<title>Home</title>
<div>
<Image
width="100%"
src="./app-promo1.png"
alt="app promo banner 1"
/>
<Image
width="100%"
src="./app-promo2.png"
alt="app promo banner 2"
/>
</div>
</Layout>
</Provider>
我的导航栏位于 Layout 组件内的 Header 组件内。
Layout.tsx
<div>
<LayoutWrapper>
<HeaderWrapper>
<div className="d-none d-md-block">
<Header />
</div>
<div className="d-block d-md-none">
<MobileHeader />
</div>
</HeaderWrapper>
<ContentWrapper>{children}</ContentWrapper>
<FooterWrapper>
<Footer />
</FooterWrapper>
</LayoutWrapper>
</div>
Header.tsx
<Wrapper>
<Container>
<NavWrapper>
<Logo>
<AniLink paintDrip hex="#24B2D8" to="/">
<Image src={logoImg} width="220px" alt="Logo" />
</AniLink>
</Logo>
<div className="d-flex flex-row justify-content-center align-items-center">
<AniLink paintDrip to="/shop" hex="#24B2D8">
<NavItem>Shop</NavItem>
</AniLink>
<AniLink paintDrip to="/activation" hex="#24B2D8">
<NavItem>Activation</NavItem>
</AniLink>
<AniLink cover to="/partners" bg="#24B2D8">
<NavItem>Partners</NavItem>
</AniLink>
<AniLink cover to="/support" bg="#24B2D8">
<NavItem>Support</NavItem>
</AniLink>
</div>
<Button
link="/"
text="Log in"
color="blue"
/>
</NavWrapper>
</Container>
</Wrapper>
我需要 Redux/Provider 的页面都是这些链接。即:/shop、/activation、/partner 和 /support。但是当我从 / 导航到 /shop 时,它给了我错误。
需要注意的一件事是我使用的是 Gatsby 而不是 create-react-app
。我不确定我是否需要在 Gatsby 上做一些特别的事情。
您的提供商需要将您的组件包装在您的应用程序中,这就是为什么当您更改页面时上下文会丢失。要在 Gatsby 中实现这一点,您可以使用双 (gatsby-browser.js
/gatsby-ssr.js
) wrappRootElement
API:
const React = require("react")
const { Provider } = require("react-redux")
const createStore = require("./src/state/createStore")
const store = createStore()
exports.wrapRootElement = ({ element }) => {
return (
<Provider store={store}>
{element}
</Provider>
)
}
element
代表 Gatsby 构建的根 React 元素。
我一直遇到错误
could not find react-redux context value; please ensure the component is wrapped in a
<Provider>
即使我已经将根文件包装在 <Provider>
中。我怀疑可能有什么问题是,嵌套组件不是包裹在 <Provider>
中,而是包裹页面的“Link”?
我的 index.tsx 文件看起来像这样
<Provider store={reduxStore}>
<Layout>
<title>Home</title>
<div>
<Image
width="100%"
src="./app-promo1.png"
alt="app promo banner 1"
/>
<Image
width="100%"
src="./app-promo2.png"
alt="app promo banner 2"
/>
</div>
</Layout>
</Provider>
我的导航栏位于 Layout 组件内的 Header 组件内。
Layout.tsx
<div>
<LayoutWrapper>
<HeaderWrapper>
<div className="d-none d-md-block">
<Header />
</div>
<div className="d-block d-md-none">
<MobileHeader />
</div>
</HeaderWrapper>
<ContentWrapper>{children}</ContentWrapper>
<FooterWrapper>
<Footer />
</FooterWrapper>
</LayoutWrapper>
</div>
Header.tsx
<Wrapper>
<Container>
<NavWrapper>
<Logo>
<AniLink paintDrip hex="#24B2D8" to="/">
<Image src={logoImg} width="220px" alt="Logo" />
</AniLink>
</Logo>
<div className="d-flex flex-row justify-content-center align-items-center">
<AniLink paintDrip to="/shop" hex="#24B2D8">
<NavItem>Shop</NavItem>
</AniLink>
<AniLink paintDrip to="/activation" hex="#24B2D8">
<NavItem>Activation</NavItem>
</AniLink>
<AniLink cover to="/partners" bg="#24B2D8">
<NavItem>Partners</NavItem>
</AniLink>
<AniLink cover to="/support" bg="#24B2D8">
<NavItem>Support</NavItem>
</AniLink>
</div>
<Button
link="/"
text="Log in"
color="blue"
/>
</NavWrapper>
</Container>
</Wrapper>
我需要 Redux/Provider 的页面都是这些链接。即:/shop、/activation、/partner 和 /support。但是当我从 / 导航到 /shop 时,它给了我错误。
需要注意的一件事是我使用的是 Gatsby 而不是 create-react-app
。我不确定我是否需要在 Gatsby 上做一些特别的事情。
您的提供商需要将您的组件包装在您的应用程序中,这就是为什么当您更改页面时上下文会丢失。要在 Gatsby 中实现这一点,您可以使用双 (gatsby-browser.js
/gatsby-ssr.js
) wrappRootElement
API:
const React = require("react")
const { Provider } = require("react-redux")
const createStore = require("./src/state/createStore")
const store = createStore()
exports.wrapRootElement = ({ element }) => {
return (
<Provider store={store}>
{element}
</Provider>
)
}
element
代表 Gatsby 构建的根 React 元素。