TypeError: Cannot destructure property 'setValues' of 'Object(...)(...)' as it is undefined. (react / create-react-app)
TypeError: Cannot destructure property 'setValues' of 'Object(...)(...)' as it is undefined. (react / create-react-app)
我有 TypeError: Cannot destructure 属性 '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);
这里是完整代码的 CodeSandBoxlink:
https://codesandbox.io/s/react-app-test-wvmlp?file=/src/App.js
您的 useContext 与 DataContext
连接,它从 {{ data, setValues }}
.
获取初始数据
因此,当您在消费者 App
中使用它时,它需要
const { 数据,setValues } = useData();
这可能是第一个错字。但也许这不是问题所在。
您是否尝试过像在您的应用程序的一部分中那样首先触发 DataProvider
。
<DataProvider>
<App>
<YOURCOMPONENT />
</App>
</DataProvider>
<DataProvider>
<App2 />
</DataProvider>
我可以看到这是作者想让你使用的,然后在你的组件中,使用useData
。
在您的沙箱中,您可能在 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
);
我有 TypeError: Cannot destructure 属性 '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);
这里是完整代码的 CodeSandBoxlink:
https://codesandbox.io/s/react-app-test-wvmlp?file=/src/App.js
您的 useContext 与 DataContext
连接,它从 {{ data, setValues }}
.
因此,当您在消费者 App
中使用它时,它需要
const { 数据,setValues } = useData();
这可能是第一个错字。但也许这不是问题所在。
您是否尝试过像在您的应用程序的一部分中那样首先触发 DataProvider
。
<DataProvider>
<App>
<YOURCOMPONENT />
</App>
</DataProvider>
<DataProvider>
<App2 />
</DataProvider>
我可以看到这是作者想让你使用的,然后在你的组件中,使用useData
。
在您的沙箱中,您可能在 Index.js
中不使用 DataProviderimport { 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
);