как инициализировать все состояния при нажатии на кнопку сброса в Redux - PullRequest
0 голосов
/ 26 июня 2018

в моем приложении я использую redux с redux-thunk. Там есть кнопка RESET , когда пользователь нажимает на нее, я хочу INITIALIZE все избыточное состояние вместо window.location.reload().
index.js (индексный файл редукторов)

import { combineReducers } from 'redux';
import { reducer as reduxFormReducer } from "redux-form";
import authReducer from './auth_reducer';
import main from './main'
import BookingData from './booking_reducer';
import StepOne from './stepone';
import StepTwo from './stepTwo'

const rootReducer = combineReducers({
    form: reduxFormReducer,
    auth: authReducer,
    Main:main,
    StepOneReducer:StepOne,
    StepTwoReducer:StepTwo,
    BookingData:BookingData,

})

export default rootReducer;

здесь каждое значение объекта содержит отдельный файл редуктора , а каждый файл редуктора имеет число состояний
App.js (корневой файл)

import ReactDOM     from "react-dom";
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import reduxThunk from 'redux-thunk';
import { composeWithDevTools } from 'redux-devtools-extension';
import AppRouter from './routers/AppRouter';
import reducers from './reducers';
const middleware = [
    reduxThunk,
];

const store = createStore(reducers, composeWithDevTools(
    applyMiddleware(...middleware),
// other store enhancers if any
));



const token = localStorage.getItem('token');
if(token){
    store.dispatch({type:AUTH_USER});
}

ReactDOM.render(
    <Provider store={store}>
        <AppRouter />
    </Provider>
    , document.getElementById('app'));

, поэтому моя проблема в том, что когда нажимаю кнопку сброса , она вызывает action Creator, она отправляет действие, когда дело доходит до редуктора (индексного редуктора). Я не могу сбросить все состояние.
я видел этот вопрос также, но здесь я не хочу менять структуру файла моего редуктора индекса, потому что мне нужно экспортировать оба, а логика проекта также получает беспорядок.
как я могу инициализировать все избыточное состояние, когда пользователь нажимает кнопку сброса

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

на самом деле я экспортировал AppReducer вместо rootReducer

import { combineReducers } from 'redux';
import { reducer as reduxFormReducer } from "redux-form";
import authReducer from './auth_reducer';
import main from './main'
import BookingData from './booking_reducer';
import StepOne from './stepone';
import StepTwo from './stepTwo'
import {RESET} from '../actions/types';
const AppReducer = combineReducers({
    form: reduxFormReducer,
    auth: authReducer,
    Main:main,
    StepOneReducer:StepOne,
    StepTwoReducer:StepTwo,
    BookingData:BookingData,

})

const rootReducer = (state, action) => {
    if (action.type === RESET) {
        console.log('reset action inside root');
        state = undefined
    }

    return AppReducer(state, action)
}

export default rootReducer;

работал Дан Абрамов решение

0 голосов
/ 26 июня 2018

Если я вас правильно понимаю, то я делаю похожую вещь в своих приложениях:

Я сбрасываю все свое состояние избыточности, отправляя действие «сброс» или «инициализация», и у меня есть регистр для всех редукторов для этого действия, где я устанавливаю состояние в начальные значения.

...