【发布时间】:2020-09-28 23:10:46
【问题描述】:
我正在使用 NextJS 构建一个应用程序。我的应用程序显示帖子列表,用户可以从 A-Z 或 Z-A 对列表进行排序,并在每页显示特定数量的帖子(10、20 等)。当用户单击帖子以访问该特定帖子页面然后返回主列表时,排序和分页首选项被重置,我设法使用 cookie 保留保留的值,但我想使用 @987654321 @ 反而。
对于这个应用程序,我有一个 Layout.js 文件,并认为这是插入我的 Provider 的正确位置,如下所示:
import React, {useState} from 'react';
import Navbar from './Navbar';
import Head from 'next/head';
import {SortingContext} from './UseContext';
const Layout = (props)=> {
const [value, setValue] = useState('hello');
return (<SortingContext.Provider value={{value, setValue}}>
<div>
<Head>
<title>MyApp</title>
</Head>
<Navbar/>
{props.children}
</div>
</SortingContext.Provider>
)};
但是当我尝试从我的一个页面中获取值时,我得到了TypeError: Cannot read property 'value' of null
我在我的应用程序的其他地方使用useContext,所以我知道我可以让它工作。我只是不明白将它放在我的 NextJS 应用程序中的哪个位置,因此即使我访问不同的页面,该值也会保留。
这是我试图打印值的 index.js:
import React, { useState, useEffect, useContext } from 'react';
import withData from '../lib/apollo';
import Layout from '../components/Layout';
import {SortingContext} from '../components/UseContext';
import Footer from '../components/Footer';
const Home = () => {
const {value, setValue} = useContext(SortingContext);
return (
<Layout>
<div className='main_screen'>
<h1>{value}</h1>
</div>
{siteOptions && <Footer />}
</Layout>
)
};
export default withData(Home);
还有我的 UseContext.js:
import {createContext} from 'react';
export const SortingContext = createContext(null);
【问题讨论】:
-
我们能否看到上下文本身以及您在哪里使用上下文?如果你有一个codeandbox,那会更好
-
我更新了问题。希望有帮助
-
确实有帮助!我提供了更详细的答案,如果您需要更清楚的说明,请告诉我!
标签: reactjs react-hooks next.js use-context