Преамбула: Долгое время использовал реакт редакс тайпскрипт. Недавно начал знакомство с хуками. Пытаюсь построить приложение с глобальным стейтом передаваемым через контекст.
Собственно вопрос: зачем нужен useReducer со всем его бойлерплейтом, если можно то же самое сделать с useState, просто все модификации стейта обернуть в те же функции-экшены?
Т.е. вместо:// index.js
const reducer (state, action) => {
switch (action.type) {
case 'actionType': {
return {
// меняем стейт тут
}
}
}
}
const [state, dispatch] = useReducer(reducer, {})
// actions.js
const someAction = () => {
return {
type: 'actionType'
}
}
// callback in someComponent.js
dispatch(someAction())
использовать:// index.js
const [state, setState] = useState({});
// actions.js
const someAction = (setState, currentState) => {
setState({
// меняем стейт тут, по сути, так же как в редьюсере
})
}
// callback in someComponent.js
someAction(setState, currentState);
Не вижу никакого бенефита в первом подходе, кроме формальностей, которые раздувают код. Или я все же что-то упускаю?