Как установить несколько значений в состоянии объектов с помощью useReducer? - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь использовать результаты функции для установки двух значений в состоянии объекта внутри редуктора. Получение значения undefined для result.

const initialState = {
    charCountsFirstName: [7, 4, 2, 2, 2, 2, 2, 4, 5, 5, 5, 9],
    allFreqsFirst: {
        labels: [],
        data: [],
    },
}

const getAllFrequencies = (arr) => {
    function getFreqs(arr) {
        // DOO A BUNCH OF STUFF...
        return [a, b];
    }
    const result = getFreqs(arr);
};

const reducer = (state, action) => {
    switch (action.type) {
        case 'SET_ALL_FREQS_FIRSTNAME':
            let result = getAllFrequencies(charCountsFirstName);

            return { 
                ...state, 
                allFreqsFirst: {
                    labels: result[0],
                    data: result[1],
                } 
            };

        default:
            return state;
    }
}

const StateProvider = ({ children }) => {
    const [newState, dispatch] = useReducer(reducer, initialState);

    // CALL DISPATCH AFTER GETTING DATA FROM API CALL
    dispatch({ type: 'SET_MOST_FREQUENT_FIRSTNAME' });
}

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Обязательно используйте state.charCountsFirstName, а не только charCountsFirstName.

...
switch (action.type) {
        case 'SET_ALL_FREQS_FIRSTNAME':
            let result = getAllFrequencies(state.charCountsFirstName); <---- like this.

            return { 
                ...state, 
                allFreqsFirst: {
                    labels: result[0],
                    data: result[1],
                } 
            };

        default:
            return state;
    }
...
0 голосов
/ 30 апреля 2020
const getAllFrequencies = (arr) => {
    function getFreqs(arr) {
        // DOO A BUNCH OF STUFF...
        return [a, b];
    }
    const result = getFreqs(arr);
    // Maybe you need to return the val ==> 'result';
    // Like: return result;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...