无法解构 ref 属性,因为它未定义,试图使用多个 ref 上下文

Cannot destructure ref property as it is undefined trying to use a multiple ref context

我想创建一个引用上下文,在我的部分中使用该上下文的引用,然后在我的导航栏中使用该上下文以使用 intersectionObserver。

为了实现这一点,我首先为每个 ref 创建了一个上下文,然后在我的 about 组件中使用了该上下文。

上下文看起来像这样:

import React, { createContext, useRef } from "react";

export const RefsContext = createContext();

export const RefsProvider = (props) => {
  const aboutRef = useRef();
  const shopRef = useRef();
  const customersRef = useRef();
  return (
    <RefsContext.Provider
      value={{
        aboutRef,
        shopRef,
        customersRef,
      }}
    >
      {props.children}
    </RefsContext.Provider>
  );
};

export default RefsProvider;

这就是我在 about.js 中使用该上下文的方式: 首先我导入上下文:import { RefsContext } from "../../../context/refsContext"; 然后我使用它:const { aboutRef } = useContext(RefsContext); 在这里我使用该 ref 来引用一个部分:<section className="about" id="about" ref={aboutRef}>

我在 about.js:10 中收到此错误消息 Uncaught TypeError: Cannot destructure property 'aboutRef' of '(0 , react__WEBPACK_IMPORTED_MODULE_0__.useContext)(...)' as it is undefined.,此行:const { aboutRef } = useContext(RefsContext);

看来您忘记包装 RefsProvider 中使用它的任何组件。这能解决这个问题吗?

编辑:为了提供更多上下文,如果您在未包装在您正在访问的上下文的提供者中的组件中使用 useContext,则该值将为 undefined。我怀疑这就是这里发生的事情。

为了解决这个问题,您需要将组件包装在 RefsProvider

例如:

<RefsProvider>
  <YourComponentThatUsesRefsContext />
</RefsProvider>