Как передать идентификатор вошедшего в систему пользователя в методе axios.get вact-redux? - PullRequest
0 голосов
/ 06 ноября 2019

Я новичок в реагировании с редуксом, когда я разрабатывал экспресс-приложение, в котором я выбираю реагирование в качестве своей концепции внешнего интерфейса и магазина редуксов. Мне нужно передать зарегистрированного пользователя как параметр в моем методе axios.get Как я могу это сделать?

Что я делал, так это получение user._id из базы данных и его использование, но этоподход утомителен и не будет работать для ряда пользователей

  componentDidMount(){
        const url="http://localhost:5000/api/users/viewFarm/5d3ac84a86688123789e13b2";
        fetch (url,{
            method: "GET"
        }).then(response=> response.json()).then(result=>{
            console.log(result);

           this.setState({
            farmList : result
           }); 
        });
  }

Я вижу в Redux Dev Tool, SET_CURRENT_USER отображает вошедшего в систему пользователя, но есть ли другой способ, чтобы я мог передатьэтот user.id в методе axios.get при выполнении ComponentDidMount (). 1. У моей реакции-редукса есть авторизации

//Json Generator
export const registerJson = (userData, history) => dispatch => {
  axios
    .post("/api/users/registerJson/5d3ac84a86688123789e13b2/5d42d171e7ceef2a90245470/5d44256d8b3cf92af46e2c9b", userData)
    .then(res => history.push("/JsonGenerator"))
    .catch(err =>
      dispatch({
        type: GET_ERRORS,
        payload: err.response.data
      })
    );
};
.
.
.
.
export const setCurrentUser = decoded => {
  return {
    type: SET_CURRENT_USER,
    payload: decoded
  };
};

Редукторы
import { SET_CURRENT_USER, USER_LOADING } from "../actions/types";

const isEmpty = require("is-empty");

const initialState = {
  isAuthenticated: false,
  user: {},
  loading: false
};

export default function(state = initialState, action) {
  switch (action.type) {
    case SET_CURRENT_USER:
      return {
        ...state,
        isAuthenticated: !isEmpty(action.payload),
        user: action.payload
      };
    case USER_LOADING:
      return {
        ...state,
        loading: true
      };
    default:
      return state;
  }
}

Магазин
import { createStore, applyMiddleware, compose } from "redux";
import thunk from "redux-thunk";
import rootReducer from "./reducers";

const initialState = {};

const middleware = [thunk];

const store = createStore(
  rootReducer,
  initialState,
  compose(
    applyMiddleware(...middleware),
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
  )
);

export default store;

Redux dev tool o / p

{
auth:{
   isAuthenticated:false=>true}
   user:{
   exp:1604591134,
   iat:1573034208,
   id:"5d36f73f67665a1740620f55",
   name:"Pritam Kumar",
   },
 }
}

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Вы можете использовать строки запроса.

componentDidMount(){
        const data = this.state.data //i put state data for example you can use any data source
        const url=`http://localhost:5000/api/users/viewFarm/?userId=${data._id}`;
        fetch (url,{
            method: "GET"
        }).then(response=> response.json()).then(result=>{
            console.log(result);

           this.setState({
             farmList : result
           }); 
        });
  }

и в вашем приложении nodejs

app.get('/api/users/viewFarm/', (req,res)=>{
    //you can use router instead of app
    console.log(req.query.userId)
})
0 голосов
/ 06 ноября 2019

В URL вы можете добавить в качестве параметра запроса

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