Логика примерно такая
- отправляем на сервер задачу
- ответ в reduce
- state изменится и произойдет render
Псевдокод ниже
const initialState = {items: []};
const reducer = (state, action) => {
switch (action.type) {
case 'ADD':
return {
...state,
items: [...state.items, action.newItem]
};
default:
throw new Error();
}
};
const App = () => {
const [state, dispatch] = useReducer(reducer, initialState);
const onAdd = e => {
window.fetch(url, {method: 'post', body: {name: 'new task'} }) // отправляем новую задачу на сервер
.then(data => dispatch({ type: 'ADD', newItem: data}) // data = {id:9, name: 'new task'} ответ сервера в reduce
.catch(err => dispatch({ type: 'ERR', err}) // как то ошибку обработать
}
return <button onClick={onAdd}> {state.items.length} </button>;
}