Redux. После combineReducers пропадает состояние

192
22 мая 2018, 20:10

Есть 2 редюсера. Если подключен только один из них - все работает, но при подключении combineReducers все состояние превращается в undefined, т.е., пропадает. Отмечу, что console.log(store.getState()) в index.js показывает редюсеры и состояние.

Корневой файл:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './components';
import registerServiceWorker from './registerServiceWorker';
import { BrowserRouter } from 'react-router-dom'
import thunk from 'redux-thunk'
import { Provider } from 'react-redux'
import { createStore, applyMiddleware } from 'redux'
// import reducer from './reducers/items'
// import rootReducer from './reducers/index'
// import changeLogin from './reducers/login'
import reducer from './reducers'
const store = createStore(reducer, applyMiddleware(thunk))
ReactDOM.render(
    <Provider store={store}>
        <BrowserRouter>
            <App />
        </BrowserRouter>
    </Provider>,
    document.getElementById('root'));
registerServiceWorker();

Первый редюсер:

import {ITEMS_FETCH_DATA_SUCCESS, ITEMS_HAS_ERRORED, ITEMS_IS_LOADING} from '../constants'
const initialState = {
    error: false,
    loading: false,
    items: {
        data: []
    }
}
export default  (state = initialState, action) => {
    switch (action.type) {
        case ITEMS_HAS_ERRORED:
            return {...state, error: action.hasErrored}
        case ITEMS_IS_LOADING:
            return {...state, loading: action.isLoading};
        case ITEMS_FETCH_DATA_SUCCESS:
            return {...state, items: action.items};
        default:
            return state;
    }
}

Второй редюсер:

import {AJAX_STATUS, ITEMS_HAS_ERRORED, ITEMS_IS_LOADING} from '../constants'
const initialState = {
    errorLogin: false,
    loadingLogin: false,
    status: {}
}
export default (state = initialState, action) => {
    switch (action.type) {
        case ITEMS_HAS_ERRORED:
            return {...state, errorLogin: action.hasErrored}
        case ITEMS_IS_LOADING:
            return {...state, loadingLogin: action.isLoading}
        case AJAX_STATUS:
            return {...state, status: action.obj}
        default:
            return state
    }
}

Combine:

import { combineReducers } from 'redux';
import news from './items'
import changeLogin from './login'
export default combineReducers({
    news, 
    changeLogin,
});

Ну и один из mapStateToProps (мало ли пригодится)

  const mapStateToProps = state => {
    return {
      items: state.items,
      hasErrored: state.error,
      isLoading: state.loading
    }
  }
Answer 1

Тьфу, надо было в mapStateToProps указать из какого state получать данные, т.е.:

const mapStateToPros = state => {
    return {
items: state.news.items,
hasErrored: state.news.errorm
 }
}
READ ALSO
Архитектура простого Single Page Application

Архитектура простого Single Page Application

Делаю дипломВопрос трезво ли я рассуждаю? Что можете посоветовать?

181
Восстановление Данных Ruby/JS/Oracle

Восстановление Данных Ruby/JS/Oracle

Помогите в поиске решение проблемы

204
Задача на Javascript [закрыт]

Задача на Javascript [закрыт]

Создайте 50-значное поле со случайными номерами от -50 до 100 (включая предельные значения) и распечатайте егоСоздайте новое поле с именем sortedNumber,...

166