【发布时间】:2020-01-23 13:53:25
【问题描述】:
我只需要在第一次访问网站时运行一些函数(例如 Office UI Fabric React 的initializeIcons())和 AXIOS 调用(例如使用 Context API 检索登录用户),然后存储检索到的值在 React Context 中并使其可用于整个应用程序。
Gatsby 将我的页面内容包装在 Layout 中,例如:
const IndexPage = () =>
<Layout>
Body of Index Page...
</Layout>
const AnotherPage = () =>
<Layout>
Body of Another Page...
</Layout>
布局如下:
const Layout = ({ children }) =>
<>
<Header />
<main>{children}</main>
<Footer />
</>
我知道我可以不将我的上下文放在哪里:
-
页面周围(或者每次点击页面都会执行,其他页面也不可用):
const IndexPage = () => <MyContextProvider> <Layout> Context Available here </Layout> </MyContextProvider>const AnotherPage = () => <Layout> Context NOT available here </Layout> -
在布局中(或者每次都会执行):
const Layout = ({ children }) => <MyContextProvider> <Header /> <main>{children}</main> <Footer /> </MyContextProvider>
我想我需要一个根 <app> 对象来围绕我的上下文提供程序,但是用 Gatsby 实现这一目标的干净方法是什么?
我应该把上下文提供者放在哪里?
【问题讨论】:
-
Here 是来自 Gatsby 官方博客的一篇很棒的博文,可能有助于解决您的需求。
-
谢谢@LionelT。这基本上是我尝试过的,排除了 localStorage (这对于保存主题很好,但对于登录用户 AFAIK 则不行)。我可以使用 sessionStorage (但随后我需要处理从同一台电脑登录的两个不同用户,并且不关闭浏览器......),我只是希望有一种方法可以“存储" Axios 调用的结果并避免再次执行它 - 无需使用一些 HTML5 存储......无论如何,我会尽快探索它
标签: javascript reactjs axios gatsby react-context