Как сохранить действие в другом состоянии? - PullRequest
0 голосов
/ 25 июня 2018

Таким образом, у меня есть одно действие с именем getUserData, а другое getAllUserData сначала получит только данные для зарегистрированного пользователя, а второе получит данные для всех пользователей из БД.Теперь я хочу иметь возможность позвонить и отправить оба.Но если я позвоню getAllUserData через 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 [],
  },
}

В редукторе я пытался создать newState = [] для 'SET_USER_DATA', но это вернуло ошибку

1 Ответ

0 голосов
/ 25 июня 2018

Ваш штат должен получать доступ к пользователям по их идентификатору, а также отслеживать текущий вошедший в систему идентификатор пользователя:

{
  ... 
  currentUserId: 'userId1',
  userData: {
    'userId1': { /* data of this user */ },
    'userId2': { /* data of this user */ },
    ... 
  }
 ...
}

В качестве альтернативы вы можете поместить это в свой state.auth, это, кажется, содержиттекущий идентификатор пользователя уже.

Таким образом, эти два действия не мешают.Но вы должны быть осторожны, если выборка одного пользователя приводит к большему количеству свойств (для этого пользователя), чем выборка всех из них.

...