从文档中可以得知:
[init,第三个参数]可让您将计算初始状态的逻辑从reducer中提取出来。这对于以后响应操作重置状态也非常方便。
而代码如下:
function init(initialCount) {
return { count: initialCount };
}
function reducer(state, action) {
switch (action.type) {
...
case 'reset':
return init(action.payload);
...
}
}
function Counter({initialCount}) {
const [state, dispatch] = useReducer(reducer, initialCount, init);
...
}
相比于重复使用一个常量的 initialState
,为什么我要这样做呢?
const initialState = {
count: 5,
};
function reducer(state, action) {
switch (action.type) {
...
case 'reset':
return initialState;
...
}
}
function Counter({initialCount}) {
const [state, dispatch] = useReducer(reducer, initialState);
...
}
在我看来似乎更简练了。
useReducer(reducer, 0)
,那么初始计数器为0。情况2是useReducer(reducer, 7, n => 2 * n)
,那么初始计数器为14。你明白了吗? - hackape