无法解构“对象(...)(...)”的属性“currentUser”,因为它为空

Posted

技术标签:

【中文标题】无法解构“对象(...)(...)”的属性“currentUser”,因为它为空【英文标题】:Cannot destructure property 'currentUser' of 'Object(...)(...)' as it is null 【发布时间】:2020-09-08 22:17:21 【问题描述】:

当我在 Next.js 中使用 react 中的 useContext() 挂钩时,我收到错误“无法解构 'Object(...)(...)' 的属性 'currentUser',因为它为空”。

// Other imports
import CurrentUserContext from "../../contexts/current-user/current-user.context";

class Layout extends React.Component 
  constructor() 
    super();
    this.state = 
      currentUser: null,
    ;
  

  unsubscribeFromAuth = null;

  componentDidMount() 
    // Auth code
  

  componentWillUnmount() 
    // unsubscribe code
  

  render() 
    const  children, title  = this.props;
    return (
      <React.Fragment>
        <Head>
          <title>title</title>
        </Head>
        <CurrentUserContext.Provider value=this.state.currentUser>
          <Header />
        </CurrentUserContext.Provider>
        children
        <Footer />
      </React.Fragment>
    );
  


export default Layout;

这里是错误发生的地方

// Other imports
import CurrentUserContext from "../../contexts/current-user/current-user.context";
import  useContext  from "react";

const Header = () => 
  const  currentUser  = useContext(CurrentUserContext);
  return (
    // Header Jsx
  );
;

export default Header;

这就是我创建上下文文件的方式

import  createContext  from "react";

const CurrentUserContext = createContext(undefined);

export default CurrentUserContext;

下面的错误截图

感谢任何帮助。

【问题讨论】:

【参考方案1】:

您的上下文的初始值只是null,并且您的上下文中没有键currentUser

this.state = 
  currentUser: null,
;

<CurrentUserContext.Provider value=this.state.currentUser> // just null

为了能够在您的上下文中解构 currentUser,您可以这样做:

<CurrentUserContext.Provider
  value=
    currentUser: this.state.currentUser
  
>

【讨论】:

另外这个链接确保上下文包裹在正确的位置ankurraina.medium.com/…【参考方案2】:

您的上下文值不是要解构的对象,它只是一个值(当前为 null),即上下文值只是 this.state.currentUser 的值,而不是 currentUser: this.state.currentUser 。您可以直接访问它,无需解构。

// Other imports
import CurrentUserContext from "../../contexts/current-user/current-user.context";
import  useContext  from "react";

const Header = () => 
  const currentUser = useContext(CurrentUserContext); // <-- Remove the curly brackets
  return (
    // Header Jsx
  );
;

export default Header;

【讨论】:

以上是关于无法解构“对象(...)(...)”的属性“currentUser”,因为它为空的主要内容,如果未能解决你的问题,请参考以下文章

为什么解构与Javascript(ES6)中的经典赋值不同?

反应使用上下文。无法解构“对象(...)(...)”的属性“currentChatbotInEdit”,因为它未定义。我该如何解决?

ES6变量的解构赋值对象的解构赋值

无法解构“未定义”或“空”的属性“allowedHost”

对象 与 解构赋值

对象的理解和解构赋值