Вопрос об обновлении состояния с помощью useReducer - PullRequest
0 голосов
/ 26 февраля 2020

Мне немного неясно, как React обрабатывает состояние обновления с помощью useReducer.

У меня есть эти биты кода, как показано ниже:

function userSelectionsReducer(state, action) {
    switch (action.type) {
        case 'editQtt':
            state[action.data.index].quantity = action.data.value;
            return state;
            break;
        case 'editDate':
            return state.map((item, index) =>
                index == action.data.index ?
                { ...item, deliveryDate: action.data.value} :
                item
            );
            break;
    }
}
const [userSelections, dispatchUserSelection] = useReducer(userSelectionsReducer, {});

useEffect(() => {
   console.log(userSelections) //will reach here with 'editDate' but not 'editQtt'
}, [userSelections])

const logState = () => {
   console.log(userSelections) //will log new value of 'state' after dispatching 'editQtt'
}
....
<button onClick={logState}>Log selections</button>

Как видите, первое действие Я пишу это так, что значение 'state' будет обновляться напрямую, а в другом я возвращаю новый экземпляр состояния с обновленным значением. Из того, что я знаю (не совсем уверен), «состояние» является неизменным и не может быть изменено напрямую, но, как я заметил с первым действием, значение «состояния» фактически изменяется, но не вызывает повторного рендеринга компонента или вызовите функцию обратного вызова useEffect. Но когда я вручную регистрирую его с помощью специальной кнопки, он показывает обновленное значение. Ребята, вы знаете, как это работает? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...