@HuckleberryDev

Зачем нам useReducer (если есть useState)?

Преамбула: Долгое время использовал реакт редакс тайпскрипт. Недавно начал знакомство с хуками. Пытаюсь построить приложение с глобальным стейтом передаваемым через контекст.

Собственно вопрос: зачем нужен 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);


Не вижу никакого бенефита в первом подходе, кроме формальностей, которые раздувают код. Или я все же что-то упускаю?
  • Вопрос задан
  • 576 просмотров
Решения вопроса 1
@abberati
frontend-разработчик
useReducer нужен для того, чтобы способы изменения стейта инкапсулировать в одном месте — внутри редьюсера. Описанный вами подход проигрывает в «понимабельности» — вы внутри actionCreator’ов размазываете логику хранилища.

И вот интересная заметка по поводу стора на хуках
https://gist.github.com/XaveScor/99431c573b53b8a0c...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы