反应使用上下文。无法解构“对象(...)(...)”的属性“currentChatbotInEdit”,因为它未定义。我该如何解决?
Posted
技术标签:
【中文标题】反应使用上下文。无法解构“对象(...)(...)”的属性“currentChatbotInEdit”,因为它未定义。我该如何解决?【英文标题】:React Use Context. Cannot destructure property 'currentChatbotInEdit' of 'Object(...)(...)' as it is undefined. How can I fix that? 【发布时间】:2020-07-11 18:26:26 【问题描述】:我尝试导入聊天机器人上下文以访问当前正在编辑的聊天机器人,但出现了问题。你有什么想法可能是这里的问题吗?
非常感谢!
这是错误信息:
这是我的 chatstate.js 的摘录:
// import packages
import React, useReducer, useContext from "react";
import axios from "axios";
// import local dependencies
import AuthContext from "../../Context/Auth/authContext";
import ChatbotContext from "../../Context/Chatbot/chatbotContext";
import chatReducer from "./chatReducer";
import ChatContext from "./chatContext";
import ADD_INPUT_TO_CHAT, SESSION_ID_CREATED from "./chatTypes";
const ChatState = props =>
// get access to auth token
const authContext = useContext(AuthContext);
const token = authContext;
// get access to current chatbot in edit
const chatbotContext = useContext(ChatbotContext);
const currentChatbotInEdit = chatbotContext;
这是我的 ChatbotState.js 的摘录:
// import packages
import React, useReducer, useContext from 'react';
import axios from 'axios';
// import local dependencies
import AuthContext from '../Auth/authContext';
import ChatbotContext from './chatbotContext';
import chatbotReducer from './chatbotReducer';
import
SUCCESSFUL_CHATBOT_FROM_USER_FETCH,
NEW_QUIZBOT_CREATED
from './chatbotTypes';
const ChatbotState = props =>
// 1 - Get access to auth token
const authContext = useContext(AuthContext);
const token = authContext;
// 2 - Create initial chatbot state
const initialChatbotState =
userChatbots: [],
currentChatbotInEdit: null
;
// 3 - Get access to the state object and the dispatch function
const [state, dispatch] = useReducer(chatbotReducer, initialChatbotState);
【问题讨论】:
这是我的控制台告诉我的:ChatState.js:19 Uncaught TypeError: Cannot destruct property 'currentChatbotInEdit' of 'chatbotContext' 因为它未定义。在 ChatState (ChatState.js:19) 在 renderWithHooks (react-dom.development.js:14825) 在 mountIndeterminateComponent (react-dom.development.js:17505) 在 beginWork (react-dom.development.js:18629) 在 htmlUnknownElement .callCallback (react-dom.development.js:188) 在 Object.invokeGuardedCallbackDev (react-dom.development.js:237) 在 invokeGuardedCallback (react-dom.development.js:292) 【参考方案1】:您可能没有为您的根组件提供上下文提供程序(如您的情况下的 AuthContextProvider,如果您有的话),我的意思是您的 app.js 或 index.js,具体取决于您打算服务的组件数量
假设你正在为所有组件提供服务,那么你可以使用你的 index.js,就像我下面的那样;
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import AuthContextProvider from './context/AuthContext';
ReactDOM.render(
<React.StrictMode>
<AuthContextProvider>
<App />
</AuthContextProvider>
</React.StrictMode>,
document.getElementById('root')
);
【讨论】:
谢谢。这也解决了我的问题。太开心了!! 是的,在这个项目中的 6 个上下文之后,您认为我会记住这一点!谢谢!【参考方案2】:我有同样的问题。也许这会对你有所帮助。
在我的 ContextFile 中:
...
export const AuthContext = createContext();
...
export default AuthContextProvider;
在我使用上下文的文件中,我这样做了:
import AuthContext from "./context/AuthContext";
所以,我没有导入“AuthContext”,而是默认“AuthContextProvider”。
尝试将 放在这一行:
import ChatbotContext from "../../Context/Chatbot/chatbotContext";
【讨论】:
这正是我的问题。始终确保您导出的是上下文而不是其提供者。在我的例子中,我的 Authcontext 文件是一个命名的导出 AuthContext 和一个默认的导出 AuthContextProvider。然后我需要在一个文件中的 AuthContext 但在没有 的情况下导入它我有相同的错误,因为上下文被报告为未定义。如果没有 ,它在逻辑上是我正在导入和重命名 AuthContext 的 AuthContextProvider【参考方案3】:我遇到了同样的问题。当我创建上下文时,我没有给出任何默认值,这不是必须的,但这就是造成问题的原因。如果我通过 null 或 undefined 问题仍然存在。
解决方法是传递一个空值,如下所示:
const MyContext = createContext("");
【讨论】:
【参考方案4】:我遇到了同样的问题,我在 index.js 级别导入提供程序解决了它
ReactDOM.render(
<React.StrictMode>
<AppContextProvider providerInitState=movie>
<App />
</AppContextProvider>
</React.StrictMode>,
document.getElementById("root")
);
【讨论】:
以上是关于反应使用上下文。无法解构“对象(...)(...)”的属性“currentChatbotInEdit”,因为它未定义。我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
反应开玩笑测试错误 - 未定义 useContext 的对象
反应钩子:useState/context;无法读取未定义的属性“头像”/如何更新嵌套对象