TypeError:无法解构“Object(...)(...)”的属性“setValues”,因为它未定义。(react / create-react-app)
2021-05-15
1228
我遇到了 TypeError: Cannot destructure property 'setValues' of 'Object(...)(...)' as it is undefined. 错误,我不知道为什么。我有一段来自 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
2个回答
在您的沙盒中,您可能没有在 Index.js 中使用 DataProvider
import { StrictMode } from "react";
import ReactDOM from "react-dom";
import { DataProvider} from "./DataContext";
import App from "./App";
const rootElement = document.getElementById("root");
ReactDOM.render(
<StrictMode>
<DataProvider>
<App />
</DataProvider>
</StrictMode>,
rootElement
);
Daphaz
2021-05-15
您的 useContext 与
DataContext
连接,后者从
{{ data, setValues }>
获取初始数据。
因此,当您在消费者
App
中使用它时,需要
const { data, setValues } = useData();
这可能是第一个拼写错误。但也许问题不在这里。
您是否先尝试过在应用程序的一部分中触发
DataProvider
。
<DataProvider>
<App>
<YOURCOMPONENT />
</App>
</DataProvider>
<DataProvider>
<App2 />
</DataProvider>
我明白这是作者希望您使用的,然后在您的组件中使用
useData
。
windmaomao
2021-05-15