Почему действие диспетчеризации переписывает значение моего магазина?

#javascript #reactjs #react-native #redux #react-redux

Вопрос:

Я дважды отправляю в магазин redux из своего функционального компонента, используя крючки redux.

Когда я отправляю их по отдельности, как это, только один из них хранится в моем магазине redux, так как он, кажется, обновляется каждый раз и сохраняет только один. Как я могу отправить их вместе или предотвратить обновление хранилища redux и потерю первой полезной нагрузки при отправке??

 dispatch({  type: "access_token",  payload: googleUser.accessToken,  });  dispatch({  type: "firebase_userId",  payload: result.user.uid,  });   

Магазин Redux

 import React from "react"; import symbolicateStackTrace from "react-native/Libraries/Core/Devtools/symbolicateStackTrace"; import { applyMiddleware, createStore } from "redux"; import thunk from "redux-thunk";  const initialState = {  access_token: "",  firebase_userId: "", };  const counterReducer = (  state = initialState,  action ) =gt; {       if (action.type === "access_token") {    return {    access_token: action.payload,  };  }   if (action.type === "firebase_userId") {    return {    firebase_userId: action.payload,  };  }   return state; };  const store = createStore(counterReducer, applyMiddleware(thunk));  export default store;    

Ответ №1:

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

 const counterReducer = (  state = initialState,  action ) =gt; {   if (action.type === "access_token") {    return {  // copy amp; update state  ...state,  access_token: action.payload,  };  }   if (action.type === "firebase_userId") {    return {  // copy amp; update state  ...state,  firebase_userId: action.payload,  };  }   return state; };  

Комментарии:

1. я попробовал это сделать, но отправляется только access_token… когда я регистрирую состояние, я получаю access_token и пустую строку для идентификатора firebase_userId

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