Javascript 为什么我不能从react上下文访问变量?你能辨认出错误吗?
我想从react上下文访问一个名为“currentNode”的数组,但它似乎不起作用。控制台错误消息如下所示: 未处理的拒绝(TypeError):无法读取null的属性“0” 似乎无法从上下文访问currentNode变量。 你能辨认出错误吗?非常感谢您的帮助 步骤1:以下是代码,以及如何将其分派到上下文:Javascript 为什么我不能从react上下文访问变量?你能辨认出错误吗?,javascript,arrays,reactjs,react-context,Javascript,Arrays,Reactjs,React Context,我想从react上下文访问一个名为“currentNode”的数组,但它似乎不起作用。控制台错误消息如下所示: 未处理的拒绝(TypeError):无法读取null的属性“0” 似乎无法从上下文访问currentNode变量。 你能辨认出错误吗?非常感谢您的帮助 步骤1:以下是代码,以及如何将其分派到上下文: const AuthState = (props) => { // auth state: create initial authState const initialSta
const AuthState = (props) => {
// auth state: create initial authState
const initialState = {
isAuthenticated: false,
chatId: null,
currentNode: [],
};
const fetchCurrentNode = async (chatId) => {
try {
const config = {
headers: {
"x-auth-token": "",
},
};
const res1 = await axios.get(
`http://localhost:4001/api/chatbots/${chatId}/nodeid`,
//`https://mybot.uber.space/api/chatbots/${chatid}`
//`https://sandbox.as.wiwi.uni-goettingen.de/teachr/chatbots/pin/${pin}`
config
);
dispatch({
type: NEW_CURRENT_NODE_CREATED,
payload: currentNode,
});
} catch (error) {
console.error(error);
}
};
return (
<ChatContext.Provider
value={{
chatId: state.chatId,
chat: state.chat,
chatSessionId: state.chatSessionId,
createChatSessionId,
addBackendAnswerToChat,
addUserInputToChat,
resetChat,
fetchEventAnswerFromDialogflow,
fetchAnswerFromDialogflow,
}}
>
{props.children}
</ChatContext.Provider>
);
};
步骤2:以下是我如何将其保存为类型:
export const NEW_CURRENT_NODE_CREATED = "NEW_CURRENT_NODE_CREATED";
步骤3:这是我的减速器功能:
import { CHATID_FETCH_SUCCESSFUL, NEW_CURRENT_NODE_CREATED } from "./authTypes";
export default (state, action) => {
switch (action.type) {
case NEW_CURRENT_NODE_CREATED:
return {
...state,
isAuthenticated: true,
currentNode: [action.payload],
};
default:
return state;
}
};
步骤4:下面是我想如何访问currentNode变量:
import AuthContext from "../../Context/Auth/authContext";
const authContext = useContext(AuthContext);
const { chatId, currentNode } = authContext;
console.log(chatId);
console.log(currentNode);
您没有向上下文值添加您试图使用的值
return (
<ChatContext.Provider
value={{
chatId: state.chatId,
chat: state.chat,
currentNode: state.currentNode, // <-- ADD THIS LINE
chatSessionId: state.chatSessionId,
createChatSessionId,
addBackendAnswerToChat,
addUserInputToChat,
resetChat,
fetchEventAnswerFromDialogflow,
fetchAnswerFromDialogflow,
}}
>
{props.children}
</ChatContext.Provider>
);
};
返回(
您的上下文声明和提供程序用法在哪里?感谢您的提及,我在上面添加了它。我看不到您在哪里更新了currentNode
,或者使用了来自axios的res1
。我看不到将currentNode
传递给您的提供程序的值
return (
<ChatContext.Provider
value={{
chatId: state.chatId,
chat: state.chat,
currentNode: state.currentNode, // <-- ADD THIS LINE
chatSessionId: state.chatSessionId,
createChatSessionId,
addBackendAnswerToChat,
addUserInputToChat,
resetChat,
fetchEventAnswerFromDialogflow,
fetchAnswerFromDialogflow,
}}
>
{props.children}
</ChatContext.Provider>
);
};