Вам не нужно вызывать асинхронные функции в вашем редукторе.Вы должны использовать другие крючки для этого.В вашем случае вы должны использовать useCallback
hook:
function App() {
const [{ items, toAddItem, loading }, dispatch] = useReducer(
reducer,
initialState
);
const addItem = useCallback(() => {
async function fakeHttp() {
dispatch({ type: "loading" });
await delay(500);
dispatch({ type: "addItem"})
}
fakeHttp();
}, []);
return (
...
<AddList
handleInput={e =>
dispatch({ type: "handleInput", value: e.target.value })
}
toAddItem={toAddItem}
addItem={addItem}
loading={loading}
/>
)
}
Я внесу некоторые изменения в ваш пример с песочницей.Вы можете увидеть рабочий пример здесь: https://codesandbox.io/embed/stupefied-currying-l39il