Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redux 如何在不同的状态下存储操作?_Redux_React Redux - Fatal编程技术网

Redux 如何在不同的状态下存储操作?

Redux 如何在不同的状态下存储操作?,redux,react-redux,Redux,React Redux,因此,我有一个名为getUserData的操作,另一个getAllUserData首先将只获取登录用户的数据,然后从DB获取所有用户的数据。现在,我希望能够同时呼叫和发送这两个。但是如果我调用getAllUserDataovergetUserData则所有状态都将更改,getUserData数据将丢失并替换为getAllUserData数据。我想把这两者都保存起来。可能吗 以下是我的行动 export function getUserData(dispatch, getState) { co

因此,我有一个名为
getUserData
的操作,另一个
getAllUserData
首先将只获取登录用户的数据,然后从DB获取所有用户的数据。现在,我希望能够同时呼叫和发送这两个。但是如果我调用
getAllUserData
over
getUserData
则所有状态都将更改,
getUserData
数据将丢失并替换为
getAllUserData
数据。我想把这两者都保存起来。可能吗

以下是我的行动

export function getUserData(dispatch, getState) {
  const state = getState();
  const { user_id, token } = state.auth;
  return axios.get(USER_DATA(user_id), {
    headers: { authorization: token }
  }).then((response) => {
    dispatch(setBusinessData(response.data.data.userData[0]));
  }).catch((err) => {
    console.log("Couldn't get user data.");
  });
}

export function getAllUserData(dispatch, getState) {
  const state = getState();
  const { token } = state.auth;
  return axios.get(USER_ALL_DATA, {
    headers: { authorization: token }
  }).then((response) => {
    let result = [];
    response.data.map(o => {
      result.push(o.userData);
    });
    merged = [].concat.apply([], result);
    dispatch(setUserData(merged));
  }).catch((err) => {
    dispatch(console.log("Couldn't get all user data."));
  });
}
这是我的减速机

module.exports = (state = [], action) => {
  switch (action.type) {
    case 'SET_USER_DATA':
      return action.userData

    case 'SET_BUSINESS_DATA':
      return action.businessData

    case 'UPDATE_USER_DATA':
      return [
        ...state,
        action.updatedUser
      ];
    default:
      return state;
  }
}
编辑

这是州政府

Object {
  "alerts": Array [],
  "auth": Object {
    "email": "user@mail.com",
    "password": "password",
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1YjI3NjAyNDAwOWI1NDA5ZjMwNzAzZWYiLCJpYXQiOjE1Mjk5MTQ0NjkwNjl9.r3hOOkx2I3qbVw_9ICRqsrSm9BLxUgachJgWax8MBDk",
    "user_id": "5b276024009b5409f30703ef",
  },
  "userData": Object {
    "_id": "5b2761be009b5409f30703f9",
    "address": Array [
      Object {
        "_id": "5b2761be009b5409f30703fb",
        "city": "London",
        "number": "14",
        "postcode": "N12 4NB",
        "street": "Chantelham Road",
      },
    ],
    "businessData": Array [
      Object {
        "_id": "5b2761be009b5409f30703fa",
        "position": "Hr Manager ",
        "type": "Coffee company",
      },
    ],
    "education": Array [],
    "experience": Array [],
    "firstName": "Josh",
    "lastName": "Wright",
    "phone": 747489345,
    "role": "employer",
    "skills": Array [],
    "volunteer": Array [],
  },
}

在reducer中,我尝试为
'SET\u USER\u DATA'
创建一个
newState=[]
,但返回了一个错误

您的州应该通过用户的ID访问用户,并跟踪当前登录的用户ID:

{
  ... 
  currentUserId: 'userId1',
  userData: {
    'userId1': { /* data of this user */ },
    'userId2': { /* data of this user */ },
    ... 
  }
 ...
}
或者,您可以将其置于
状态。auth
,它似乎已经包含当前用户ID


这样两个动作就不会相互干扰。但是,如果获取一个用户的属性(对于该用户)比获取所有用户的属性多,那么您必须小心。

您的应用程序
状态如何?它肯定应该是一个对象而不是数组它是一个对象你能用你的状态更新一个问题吗?因为在reducer中,我看到它现在就像一个arraycheck,因为我已经粘贴了部分状态,你想在哪里执行此操作?@MarkusHayner你需要更改两个用户获取操作和reducer。一旦分离1)用户数据和2)已登录用户的指示器的方法明确,它应该是显而易见的。这是一种使你的状态正常化的方法。如果方法不清楚,我可以试着解释更多。