开发者问题收集

Next.js 无法读取未定义的属性“xx”

2021-08-06
688

我正在尝试使用 React 上下文和多步骤表单创建一个简单的测验应用。这是我处理表单数据的代码

import { useState, createContext, useContext } from "react";

export const QuizContext = createContext();

export default function QuizProvider({ children }) {
  const [data, setData] = useState({});

  const setQuizValues = (values) => {
    setData((prevValues) => ({
      ...prevValues,
      ...values,
    }));
  };

  return (
    <QuizContext.Provider value={{ data, setQuizValues }}>
      {children}
    </QuizContext.Provider>
  );
}

export const useQuizData = () => useContext(QuizContext);

现在,进入我的第一步组件,我收到 TypeError:无法读取未定义的属性“setQuizValues”:

import { Card } from "../../stories/Card";
import { useQuizData } from "../../context/index"

export const TacoCathegories = ({quizStep, prevQuizStep, nextQuizStep}) => {
  const { setQuizValues } = useQuizData();

  const handleSubmit = (values) => {
    setQuizValues(values);
    prevQuizStep();
    nextQuizStep();
  };

  return (
    <div className="max-w-7xl mx-auto py-24 px-4 bg-white sm:px-6 lg:px-8">
      <div className="mt-24 space-y-12 lg:space-y-0 lg:grid lg:grid-cols-3 lg:gap-x-8">
         <Card />
      </div>
    </div>
  );
}

实际上,我正在执行与类似项目相同的步骤。

1个回答

看起来 useQuizData 钩子返回的是 undefined 。如果您没有在调用此钩子的组件上方包含测验上下文的提供程序,就会出现这种情况,因为上下文的默认值是 undefined 。尝试将您的组件树包装在 <QuizProvider> ... </QuizProvider> 中。

Mack
2021-08-06