使用 Next.js 在两个页面之间保留数据
Persist data between two pages with Next.js
我想重构我的 Next.js 网络应用程序,让不同的页面处理不同的屏幕。目前,我让这个组件保持几个状态,以了解我在哪个屏幕中。在 jsx 部分,我使用 {value && ... }
来呈现正确的组件。
但我觉得这不是一个好的设计,并且在添加越来越多的屏幕时将无法维护。
我也想避免使用 Redux,因为它对我的项目来说太过分了。
我正在考虑将数据持久化在 cookie 中,这样我就可以在呈现新页面时在每个组件中使用 getInitialProps 检索它们,但是有没有更优雅的方法?
我读过有关调整 _app.js
的内容,但我不确定是否理解这样做的后果,以及它如何帮助我..
有什么建议吗?
当您的多个页面需要使用相同的数据时,您可以使用上下文来存储结果。这是一种无需使用复杂且更自给自足的库(如 redux
)即可进行集中式存储的好方法
您可以在 _app.js 文件中实现上下文,该文件必须位于您的根文件夹中。这样 next.js 将其视为根包装器,您只需要使用 1 个 Context
实例
contexts/appContext
import React from 'react';
const AppContext = React.createContext();
export const AppProvider = AppContext.Provider;
export const AppConsumer = AppContext.Consumer;
export default AppContext;
_app.js
import React from 'react'
import App from 'next/app'
import AppProvider from '../contexts/appContext';
class MyApp extends App {
state={
data:[]
}
render() {
const { Component, pageProps } = this.props;
// You can implement logic in this component to fetch data and update state
return (
<div>
<AppProvider value={this.state.data}> // pass on value to context
<Component {...pageProps} />
</AppProvider>
</div>
)
}
}
export default MyApp
现在每个组件都可以通过使用 AppConsumer 或使用 useContext
如果您使用 hooks
来进一步利用上下文值
请详细了解如何使用Context here
我想重构我的 Next.js 网络应用程序,让不同的页面处理不同的屏幕。目前,我让这个组件保持几个状态,以了解我在哪个屏幕中。在 jsx 部分,我使用 {value && ... }
来呈现正确的组件。
但我觉得这不是一个好的设计,并且在添加越来越多的屏幕时将无法维护。
我也想避免使用 Redux,因为它对我的项目来说太过分了。
我正在考虑将数据持久化在 cookie 中,这样我就可以在呈现新页面时在每个组件中使用 getInitialProps 检索它们,但是有没有更优雅的方法?
我读过有关调整 _app.js
的内容,但我不确定是否理解这样做的后果,以及它如何帮助我..
有什么建议吗?
当您的多个页面需要使用相同的数据时,您可以使用上下文来存储结果。这是一种无需使用复杂且更自给自足的库(如 redux
您可以在 _app.js 文件中实现上下文,该文件必须位于您的根文件夹中。这样 next.js 将其视为根包装器,您只需要使用 1 个 Context
实例contexts/appContext
import React from 'react';
const AppContext = React.createContext();
export const AppProvider = AppContext.Provider;
export const AppConsumer = AppContext.Consumer;
export default AppContext;
_app.js
import React from 'react'
import App from 'next/app'
import AppProvider from '../contexts/appContext';
class MyApp extends App {
state={
data:[]
}
render() {
const { Component, pageProps } = this.props;
// You can implement logic in this component to fetch data and update state
return (
<div>
<AppProvider value={this.state.data}> // pass on value to context
<Component {...pageProps} />
</AppProvider>
</div>
)
}
}
export default MyApp
现在每个组件都可以通过使用 AppConsumer 或使用 useContext
如果您使用 hooks
请详细了解如何使用Context here