useReducer()
是 React 中的一个 Hook,用于管理复杂的状态逻辑。它类似于 Redux,但更加轻量级。useReducer()
接受一个 reducer 函数和一个初始状态,返回当前状态和一个 dispatch 函数。reducer 函数接收当前状态和一个 action 对象,返回新的状态。
useReducer()
的参数类型如下:
reducer: (state: State, action: Action) => State
initialState: State
返回值类型如下:
state: State
dispatch: (action: Action) => void
适用于管理复杂的状态逻辑,例如表单状态、多个子值的更新等。
在使用 useReducer()
时,如果遇到 TypeError: state is not iterable
的错误,通常是因为尝试对不可迭代的状态进行迭代操作。这可能是由于以下原因:
以下是一个完整的示例,展示了如何正确使用 useReducer()
:
import React, { useReducer } from 'react';
const initialState = [];
const reducer = (state, action) => {
switch (action.type) {
case 'ADD_ITEM':
return [...state, action.payload];
default:
return state;
}
};
const App = () => {
const [items, dispatch] = useReducer(reducer, initialState);
const addItem = () => {
dispatch({ type: 'ADD_ITEM', payload: 'New Item' });
};
return (
<div>
<ul>
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
<button onClick={addItem}>Add Item</button>
</div>
);
};
export default App;
通过以上方法,可以有效解决在使用 useReducer()
时遇到的 TypeError: state is not iterable
错误。
领取专属 10元无门槛券
手把手带您无忧上云