Почему состояние не обновляется с помощью редуктора с помощью Object.assign? - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь создать редуктор без выгоды ES6.Это старое PHP-приложение без процесса сборки, которое можно было бы использовать для переноса.

Я инициализирую состояние:

let defaultState =  {
    accountTypes: {
        personal: {
            selected: false,
            checking: {
                selected: false
            },
            savings: {
                selected: false
            }
        },
        business: {
            selected: false,
            checking: {
                selected: false
            },
            savings: {
                selected: false
            }
        }
    }
};

Вот редуктор, а затем хранилище init:

function reducer(state, action) {
  switch (action.type) {
    case 'TOGGLE_ACCOUNT_TYPE':
      console.log(state.accountTypes);
      // {
      //   business: {selected: false, checking: {…}, savings: {…}}
      //   personal: {selected: true}
      // }

      console.log(action.payload);
      // {
      //   personal: {selected: true}
      // }

      let blah = Object.assign({}, state, {
        accountTypes: Object.assign({}, state.accountTypes, action.payload)
      });

      console.log(blah.accountTypes);
      // {
      //   business: {selected: false, checking: {…}, savings: {…}}
      //   personal: {selected: true}
      // }

      return blah;

    default:
      return state;
  }
}

const store = Redux.createStore(reducer, defaultState);
let state = store.getState();

Подписка на состояние позже, внутри jQuery document.ready:

store.subscribe(function () {
    console.log(state.accountTypes);
    // {
    //    business: {selected: false, checking: {…}, savings: {…}}
    //    personal: {selected: false, checking: {…}, savings: {…}}
    // }

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

1 Ответ

0 голосов
/ 06 февраля 2019

Я думаю, что только что наткнулся на свой ответ.Отправив вопрос, я что-то потерял.Я использовал устаревшую переменную состояния для моих операций jQuery.

store.subscribe(function () {
    // update the state var
    state = store.getState();

Если есть лучший способ использовать переменную состояния, не обновляя ее вручную, отправьте другой ответ.

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