Мутация состояния редуктора была обнаружена между отправками - PullRequest
0 голосов
/ 19 января 2019

Вот что я делаю -

В настоящее время у меня есть пустой массив в authProcessCurrentData в редукторе.Первоначально я устанавливаю массив в нем, как ..

[{label:'sign in', id:uuid, type:button}...] //buttonArray
[{label:'Pleae login in', id:uuid, type:text}...] //buttonArray

, который я вставляю по таймауту (один за другим).Как только у меня будет полный отформатированный массив, я отправляю его в тип редуктора AUTH_SCREEN_CURRENT_DATA.который работает нормально, но в следующем случае вставляется тот же массив с разными метками (сначала текстовые данные, а затем кнопки, как и раньше).Я получаю новые данные из магазина, но с предупреждением A state mutation was detected between dispatches.Я пробовал с разными методами вставки массива с другим ключом редуктора, но не повезло.Любая помощь?

    export const injectProps =  index =>{
const { dispatch, getState } = storeObj.store;
let currentBotData = getState().onBoarding.authProcessData;

let {textData,  identifier} = currentBotData[index];
let buttons = currentBotData[index].buttonsData

let i = 0;
dispatch({ type: "AUTH_SCREEN_RESPONSE_REQUEST" });
let array = [];
Array.prototype.insert = function(ind, item) {
  this.splice(ind, 0, item);
};
let interval  = setInterval(async() => {
  let currentDataObjs = getState().onBoarding.authProcessCurrentData?getState().onBoarding.authProcessCurrentData:[];
  let newTextArray = [...currentDataObjs]
  newTextArray.insert(0,textData[i]);
  if (i <= textData.length-1) {
    dispatch({ type: "AUTH_SCREEN_CURRENT_DATA", currentData: newTextArray, currentScreen:index});
    i += 1;
  }
  if (i === textData.length){
    clearInterval(interval);
     setTimeout(() => {
      dispatch({ type: "ONBOARDING_LOADER_STOP" });
     }, 1000);
     let nextArray = [...buttons,...newTextArray];
     console.log("nextArray nextArray ",nextArray)
      return new Promise(_=>_(dispatch({
        type: "AUTH_SCREEN_CURRENT_DATA",
        currentData: nextArray,
        currentScreen:index
      })

    ));
  }
  if (i > textData.length){
   clearInterval(interval);
   return setTimeout(() => {
    return new Promise(_=>_( dispatch({
      type: "ONBOARDING_LOADER_STOP"
  })))
   }, 1000);

  }
}, 1000);}
...