【发布时间】:2021-06-24 17:09:19
【问题描述】:
编辑:
我没有使用
import Link from 'next/link';
在我的 Header.tsx 组件中。
现在可以了。
不知道我在这里做错了什么。 我尝试创建仅流经页面的全局状态(以指示用户是否已登录),并尝试使用 react 的钩子 useContext 来实现。
它不像我想要的那样工作。当我 toggleLogged 并转到另一个页面时,上下文具有默认值,而不是更改后的值。 我认为我面临的问题是一些非常小的问题,或者是我无法看到的基本问题。
这是我的 UserContext.ts 文件的外观:
import { createContext, useContext } from 'react';
type userContextType = {
isLogged: boolean;
toggleLogged: () => void;
};
const userContextDefault: userContextType = {
isLogged: false,
toggleLogged: () => {},
};
export const UserContext = createContext(userContextDefault);
export function useUserContext() {
return useContext(UserContext);
}
这是我的 Layout.tsx:
import React, { useState } from 'react';
import Header from './Header';
const Layout = (props: any) => {
const { children } = props;
return (
<div className='container'>
<Header />
{children}
</div>
);
};
export default Layout;
最后是我的_app.tsx:
import type { AppContext, AppProps } from 'next/app';
import Layout from '../components/Layout';
import { useState } from 'react';
import { UserContext } from '../components/UserContext';
import '../styles/globals.css';
const MyApp = ({ Component, pageProps }: AppProps) => {
const [isLogged, setIsLogged] = useState(true);
const toggleLogged = () => {
setIsLogged((isLogged) => !isLogged);
};
return (
<UserContext.Provider value={{ isLogged, toggleLogged }}>
<Layout>
<Component {...pageProps} />;
</Layout>
</UserContext.Provider>
);
};
export default MyApp;
提前感谢您的帮助。
【问题讨论】:
-
您在哪里以及如何使用该上下文?
标签: javascript reactjs typescript next.js