自定义的hook不是一个函数吗?

bob*_*947 3 reactjs next.js react-hooks

我正在尝试创建一个 SessionProvider 以避免 propdrilling 并在全局范围内为我的组件保留会话。

但它说 useSession 不是一个函数,给出了什么?

contexts\SessionContext.js: TypeError: (0 , _hooks_useSession__WEBPACK_IMPORTED_MODULE_2__.useSession) is not a function
Run Code Online (Sandbox Code Playgroud)

我的自定义挂钩(useSession.js):

import { useState } from 'react'

function useSession(isLoggedInState) {

    const [isLoggedIn, setIsLoggedIn] = useState(isLoggedInState);

    return { isLoggedIn, setIsLoggedIn, }
}

export default useSession;
Run Code Online (Sandbox Code Playgroud)

我的提供者(SessionContext.js):

import React, { createContext, useState } from 'react'
import { useSession } from '../hooks/useSession'

const SessionContext = createContext();

function SessionProvider({ children, isLoggedin = false }) {

    const { isLoggedIn, setIsLoggedIn } = useSession(isLoggedin);

    return (
        <SessionContext.Provider value={isLoggedIn, setIsLoggedIn}>{children}</SessionContext.Provider>
    )
}

export { SessionProvider, SessionContext };
Run Code Online (Sandbox Code Playgroud)

我已经在 _app.js 中使用了我的应用程序,然后在 Home (index.js) 中我尝试在那里使用它:

import React from 'react'
import { Text, TextContainer } from 'react-md'

import { useContext } from "react";
import { SessionContext } from "../contexts/SessionContext";

export default function Home() {

  const { isLoggedIn, setIsLoggedIn } = useContext(SessionContext);

  return (

    <TextContainer>
      <Text type="headline-4">Hello, world!</Text>
    </TextContainer> 
  )
}
Run Code Online (Sandbox Code Playgroud)

有人看出我哪里错了吗?

MMH*_*MMH 7

您需要更改在 SessionContext.js 中导入“useSession”挂钩的方式。

它应该像这样导入(不带大括号),因为您将其导出为默认组件。

import useSession from '../hooks/useSession'
Run Code Online (Sandbox Code Playgroud)