Как добавить новый объект в существующее состояние, используя Sagag и Redx Saga. - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть объект с такой информацией.

export const initialSettings = {
  id: '01',
  name: '',
  lat: '',
  long: '',
  adressLine1: '',
  adressLine2: '',
  city: '',
  state: '',
  country: '',
  zipcode: '',
  status: '',
  lastCommunicateDateTime: '',
    {
      PatientID: '1',
      FirstName: 'Manav',
      LastName: 'Pandya',
      DateOfBirth: '',
      MobileNo: '',
      orders: [
        {
          orderId: '01',
          pickupCode: 'XYZ456',
          totalAmount: 40.0,
          taxPercentage: 3,
          insuranceAmount: 20.0,
          totalCoPayAmount: 40.0,
          totalPaidAmount: 40.0,
          totalDueAmount: '',
          paymentDueDate: '',
          items: [
            {
              itemId: '01',
              image: 'https://via.placeholder.com/30',
            }
          ]
        }
      ]
    },
    {
      PatientID: '2',
      FirstName: 'Manav',
      LastName: 'Pandya',
      DateOfBirth: '',
      MobileNo: '',
      orders: [
        {
          orderId: '01',
          pickupCode: 'XYZ456',
          totalAmount: 40.0,
          taxPercentage: 3,
          insuranceAmount: 20.0,
          totalCoPayAmount: 40.0,
          totalPaidAmount: 40.0,
          totalDueAmount: '',
          paymentDueDate: '',
          items: [
            {
              itemId: '01',
              image: 'https://via.placeholder.com/30',
            }
          ]
        }
      ]
    }
  ]
};

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

Всякий раз, когда я публикую свою форму с деталями, отличными от предыдущих, удаляются и новый объект добавляется ненадлежащим образом.

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

 case 'add':
      return Map({
        state: {
          ...state, // old object should remains same
          patients: [state.patients, action.payload] // new item
        }
      });

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы должны добавить редуктор;

case 'add':
  return {
    ...state,
    error: false,
    loading: false,
    data: state.data.concat(action.data), }

, после чего вам нужен селектор для отправки ваших данных из селектора в состояние;

export const getDataDetail = state => getDataDetail(state)?.data;

последний вариант - вы должны вызывать ваши обновленные данные.Вы должны использовать

componentWillRecieve(nextProps) {
  ...... use your data match with nextProps and props
 if(nextData && nextData !== this.props.yourData) {
     this.setState({ data : nextData }) }}

это должно быть так.

0 голосов
/ 26 декабря 2018

В редукторе должно быть так:

case 'add':
    return {
        ...state, // old object should remains same
        patients: [state.patients, action.payload] // new item
    };
...