javascript - 使用 Hooks 时,React Context 更新状态未反映在嵌套函数中
问题描述
在我最初渲染 react 组件的过程中,我显示了两个按钮。如果我单击主要按钮。相关的 onClick 函数将调度一个事件来更新 reducer 状态,然后执行再次打印状态的嵌套函数。
我面临的问题是更新的状态没有反映在嵌套函数中。你能告诉我我在这里缺少什么吗?
import React, { useEffect, useContext } from "react";
import { MainContext } from "../Main/Main";
// Main
function FirstTab() {
// // Access Context
const { mainState, mainDispatch } = useContext(MainContext);
const filterState = mainState.filter;
console.log("AppMainState->SalesTab:", filterState);
const updateFilterContext = (data) => {
console.log("Inside Filter Update:", data);
mainDispatch({ type: "UPDATE_FILTER", data: data });
};
//ss
const PrimaryClick2 = (filterState) => {
console.log("Primary Click2");
console.log("AppMainState->PrimaryClick2:", filterState);
};
const PrimaryClick1 = (filterState) => {
console.log("Primary Click1");
console.log("AppMainState->PrimaryClick1:", filterState);
PrimaryClick2(filterState);
};
const PrimaryClick = (filterState) => {
console.log("Primary Click");
console.log("AppMainState->PrimaryClick:", filterState);
updateFilterContext({ selectedValue: "NEWVALUE" });
PrimaryClick1(filterState);
};
useEffect(() => {
console.log("Step1: Generating First Tab");
}, [mainState.filter.applyFilter]);
return (
<div>
<div>
<button class="ui primary button" onClick={PrimaryClick}>
Primary
</button>
<button class="ui secondary button">Secondary</button>
</div>
</div>
);
}
export default FirstTab;
解决方案
我的猜测是mainDispatch
异步的。
您可以通过以下方式检查更改:
useEffect(() => {
console.log('mainState changed')
console.log(mainState.filter)
}, [mainState])
推荐阅读
- oracle - 查询以计算来自不同表的值
- r - 在闪亮的应用程序中基于一个动作按钮隐藏和显示绘图
- java - org.springframework.web.util.NestedServletException:请求处理失败;
- python - 将文本文件中的第一行与其他行进行比较以查看时间差异
- .net - using docker-compose.debug.yml from Visual studio for debugging purposes
- javascript - Materialize sidenav 可折叠在单独的 JS 文件中不起作用
- regex - 优化正则表达式“展开循环”模式
- python - Django 和多租户哪些应用程序必须共享,哪些应用程序必须是公共的
- android - Firebase 实时数据库 setValue() 不工作
- flutter - Flutter Bloc:返回自定义构造函数对象作为状态