как получить идентификатор пользователя в действии редукса? - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь распечатать только элементы, связанные с пользователем. Поэтому я пытаюсь получить элементы, запрашивая данные у идентификатора пользователя /api/items/:userid Я использую избыточный магазин

мой код на стороне сервера выглядит следующим образом

router.get("/:userid",(req, res) => {
  // Item.find({ "owner.ownerName": `${req.params.userid}`})
  Item.find({ "owner.id": `${req.params.userid}`})
    .sort({
      date: -1,
    })
    .then((items) => res.json(items));
   console.log(req.user)
});

Проблема заключается в моем запросе переднего плана , Я не знаю, как получить идентификатор пользователя внутри ITEMACTION.

import {
  GET_ITEMS,
  ADD_ITEM,
  DELETE_ITEM,
  ITEMS_LOADING,
  UPDATE_ITEM,
  SUBSTRACT_ITEM,
} from "../actions/types";
import { tokenConfig } from "../actions/authActions";
import { returnErrors } from "../actions/errorActions";
import Axios from "axios";

export const getItems = () => (dispatch) => {
  // will hit reducer
  dispatch(setItemsLoading());
  Axios.get("/api/items/")
    .then((res) =>
      dispatch({
        type: GET_ITEMS,
        payload: res.data,
      })
    )
    .catch((err) => {
      dispatch(returnErrors(err.response.data, err.response.status));
    });
};

Я на самом деле пытался получить идентификатор пользователя из хранилища приставок.

import store from '../store';

и внутри getItems

store.getState().auth.user._id

проблема в том, что когда я console.log в getItems, идентификатор пользователя всегда возвращает ноль, кроме первого раза после входа в систему. Но когда я смотрю в Redx Dev Tool. Идентификатор пользователя доступен

Redux store state image

как я могу получить идентификатор пользователя

1 Ответ

1 голос
/ 03 мая 2020

Эй, вы можете получить getState в качестве второго аргумента во внутренней функции вместе с диспетчеризацией, используя которую вы можете получить доступ к обновленному состоянию в действии. Фиксированный код:

export const getItems = () => (dispatch, getState) => {
  // will hit reducer
  const userId = getState().auth.user._id;
  console.log(userId) // should output the updated data
  dispatch(setItemsLoading());
  Axios.get("/api/items/")
    .then((res) =>
      dispatch({
        type: GET_ITEMS,
        payload: res.data,
      })
    )
    .catch((err) => {
      dispatch(returnErrors(err.response.data, err.response.status));
    });
};

store.getState не возвращает обновленное состояние, чтобы получить обновленное состояние с помощью store.getState (), вам необходимо подписаться на изменение состояния.

const unsubscribe = store.subscribe(() => {
    // logs the state data everytime an action is dispatched.
    console.log("from listener: ", store.getState());
})

Подробности здесь

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