【发布时间】:2021-06-19 18:59:38
【问题描述】:
我有一个表单,它必须预先填充一些值。这些值来自上下文。我正在使用减速器来处理表单的状态,因此我根据从上下文中获得的信息来设置减速器的初始状态。现在发生的情况是上下文发生了变化,但 reducer 状态没有改变。
const { selectedCurrency } =
useContext<CurrenciesContextType>(CurrenciesContext);
const [state, dispatch]: [CurrencyReducerState, Dispatch<any>] = useReducer(
currencyReducer as ReducerWithoutAction<CurrencyReducerState>,
selectedCurrency,
init
);
理想情况下,当 selectedCurrency 发生变化时,它应该设置初始值。但它不会发生。知道为什么吗?我已将父组件包装在提供程序中。此外,每次 selectedCurrency 更改时,我都会看到 selectedCurrency 更改但减速器状态不会更改。如果组件被重新渲染,那么 reducer 会拾取更改并正确初始化。有没有办法做到这一点?
【问题讨论】:
-
第三个参数 init 是一个函数,该函数在哪里定义? init 被称为延迟初始化,我无法从发布的问题中找到 sn-p
-
@Learner
const init = (state)=>({...INITIAL_STATE, ...state});
标签: reactjs react-hooks