@evg_96

Почему не получается запросить пользователя из состояния?

Есть коллекция в состоянии users и коллекция auth.user с авторизованным пользователем.
Попробовал написать селектор для запроса из users запросить авторизованного пользователя.
Но почему то возвращает undefined...

export const state = state => state;
export const getCurrentUser = createSelector(state, state => {
  return state["users"].entities.forEach(user => {
    if (user.email === state["auth"].user.email) {
      return user;
    }
  });
});

class User extends React.Component {
  getDate(date) {
    return new Date(date);
  }

  render() {
    console.log(this.props.user.uid); // 2 раза выводит undefined.

    return (
      <div>
        <h1>Информация о пользователе</h1>
        <hr/>
        {
          !this.props.loaded
          ? <Loader />
          : <table className="table table-hover">
              <tbody>
                <tr><th>Имя:</th><td> { this.props.user.name }</td></tr>
                <tr><th>Почта:</th><td> { this.props.user.email }</td></tr>
                <tr><th>Телефон:</th><td> { this.props.user.phone }</td></tr>
                <tr><th>Адрес:</th><td> { this.props.user.address }</td></tr>
                <tr><th>Потраченная сумма:</th><td> { this.props.user.totalSpend } тенге</td></tr>
                <tr><th>Количество заказов:</th><td> { this.props.user.ordersCount }</td></tr>
                <tr><th>Дата регистрации:</th><td> { this.getDate(this.props.user.registeredAt).toLocaleString("ru") }</td></tr>
              </tbody>
          </table>
        }
      </div>
    );
  }
}

export default connect(
  state => ({
    loaded: state["users"].loaded,
    user: getCurrentUser(state) // state["users"].entities.valueSeq().toArray()[0] так получается пользователя взять, но нужно именно авторизованного
  })
)(User);
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
return state["users"].entities.forEach(user => {
  if (user.email === state["auth"].user.email) {
    return user;
  }
});

Серьёзно? А вы в курсе, что forEach возвращает undefined? Наверное, стоит использовать find:

return state.users.entities.find(user => user.email === state.auth.user.email);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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