【发布时间】:2021-08-05 11:58:21
【问题描述】:
我遇到 TypeError: Cannot destructure property 'setValues' of 'Object(...)(...)' 因为它是未定义的。 错误,我不知道为什么。我有一段来自 App.js 的代码:
import { DataProvider, useData } from "./DataContext";
function App({ ...rest }) {
const { setValues, data } = useData();
...
和 DataContext.js
import React, { createContext, useState, useContext } from "react";
const DataContext = createContext();
export const DataProvider = ({ children }) => {
const [data, setData] = useState({});
const setValues = (values) => {
setData((prevData) => ({
...prevData,
...values
}));
};
return (
<DataContext.Provider value={{ data, setValues }}>
{children}
</DataContext.Provider>
);
};
export const useData = () => useContext(DataContext);
这里是完整代码的 CodeSandBox 链接:
https://codesandbox.io/s/react-app-test-wvmlp?file=/src/App.js
【问题讨论】:
-
哪一行导致错误?
-
看起来您正在访问在注入上下文提供程序的同一组件中读取 che 上下文的钩子,因此那里没有可用的 comtext。首先用提供者包装一个组件,然后在包装的组件内,调用钩子以从上下文中读取
-
@quirimmo 请改正你的错别字
-
@CodeApprentice 我正在打电话,但我希望这个想法很清楚,他正在访问应用程序中的上下文,它很可能会在其中注入它。所以他正在访问一个尚不可用的上下文。上下文的值未定义,您正在访问未定义的道具(setValue)
标签: javascript reactjs create-react-app