Как я могу перебрать массив из моего магазина избыточных - PullRequest
0 голосов
/ 24 октября 2019

У меня есть магазин с

const initialState = {
    users: dummyData,
    is_created: false
};

, где users - массив. Затем селектор getUsers const getUsers = state => state.users;

Внутри компонента я использовал useSelector, чтобы получить доступ к своему состоянию.

    const { users } = useSelector(state => ({
        users: getUsers(state),
    }));

Когда я пытаюсь перебрать users

        for (let i = 0; i < users.length; i++) {
            //...
        }

Я получаю сообщение об ошибке Cannot read property 'length' of undefined

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Я обнаружил ошибку из таблицы инструментов для редуктора. Я использую комбинироватьReducers (), и я назвал редуктор после users имени компонента, то есть

export default combineReducers({
    users: users.reducers,
});

Так что правильный селектор будет

const getUsers = state => state['users'].users;
0 голосов
/ 24 октября 2019

useSelector, по-видимому, запускает предоставленную функцию в произвольное время, поэтому гарантированно не будет определено users, когда вы захотите, из-за природы async.

Пара способов, которыми вы можете справиться с этим:

Сначала определите значение по умолчанию для users, например:

   const { users = [] } = useSelector(state => ({
        users: getUsers(state),
    }));

Это должно решить вашу проблему.

Улучшение кода выше с использованием цикла for не будет полагаться на цикл for, вместо этого используйте .map, как показано ниже:

   users.map(user => { ... });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...