Заметьте, я звоню setStepPositionIndex()
с dispatch()
. Когда я удаляю dispatch(...)
, чтобы стать просто setStepPositionIndex()
Я ожидал бы, что диспетчерский вызов в пределах setStepPositionIndex()
получит объект простого действия, который он передал, и отправит его ...
В качестве альтернативы , если я удаляю вызов dispatch()
внутри setStepPositionIndex()
(и сохраняю dispatch(setStepPositionIndex()
) при явном возврате в него обычного значения actionObj
, я ожидаю успешной отправки с dispatch(setStepPositionIndex(actionObj))
Но для успешного выполнения этого создателя действия требуется и то, и другое ... почему?
/* actions.js */
import { store } from "../store.js";
store.dispatch(setStepPositionIndex());
export const SET_STEP_POSITION_INDEX = "SET_STEP_POSITION_INDEX";
export const setStepPositionIndex = () => {
return (dispatch, getState) => {
const newSteps = getState().goals.currentGoalSteps.map((stepObj, index) => {
return { ...stepObj, positionIndex: index };
});
console.log("newSteps", newSteps);
/* [{step: "Step3", positionIndex: 0}
{step: "Step2", positionIndex: 1}
{step: "Step1", positionIndex: 2}] */
const actionObj = {
type: SET_STEP_POSITION_INDEX,
stepsArr: newSteps
};
// Unsuccessful alone ->
// return actionObj
// unsuccessful alone (removing dispatch() wrapper from setStepPositionIndex
//->
return dispatch(actionObj);
};
};
/*Reducer.js*/
import * as actions from "../Actions/actions";
import { store } from "../store";
if (action.type === "SET_STEP_POSITION_INDEX") {
return update(state, {
currentGoalSteps: { $set: action.stepsArr }
});
}
/*Store.js */
import { createStore, applyMiddleware, compose, combineReducers } from "redux";
import { ApolloClient } from "react-apollo";
import { createLogger } from "redux-logger";
import { reducer as formReducer } from "redux-form";
// import { client } from './index'
import thunk from "redux-thunk";
import * as Goal_Reducer from "./Reducers/Global_Reducer";
const logger = createLogger({
collapsed: (getState, action, logEntry) => !logEntry.error,
predicate: (getState, action) => !action.type.includes("@@redux-form")
});
const client = new ApolloClient();
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
export const store = createStore(
combineReducers({
goals: Goal_Reducer.goalReducer,
apollo: client.reducer(),
form: formReducer
}),
{}, //initial state
composeEnhancers(applyMiddleware(client.middleware(), thunk, logger))
);