Skip to content

State is undefined, can not get initial state #64

@nhuthuynh

Description

@nhuthuynh

Hi guys,

i'm trying implement redux immutable in my project but i got stuck at connect mapStateToProps because the state returned from redux is Map object from ImmutableJS and i can not access user property also other properties in state by state.user or state.get('user') . So i posted my code here and need some advice from you guys, thanks in advance! Here is my code:

folder: store/configureStore.js


"use strict";

import {applyMiddleware, createStore} from 'redux';
import thunk from 'redux-thunk';
var promise = require('./promise');
var array = require('./array');
import rootReducers from '../reducers';
var createLogger = require('redux-logger');
var {AsyncStorage} = require('react-native');
import Immutable from 'immutable';

var isDebuggingInChrome = __DEV__ && !!window.navigator.userAgent;
const initialState = Immutable.Map({
    user: {
        isLoggedIn: false,
        username: null,
        session_id: null,
        name: null,
        uid: null
    }
});

var logger = createLogger({
  predicate: (getState, action) => isDebuggingInChrome,
  collapsed: true,
  duration: true,
});

var createCassiStore = applyMiddleware(thunk, promise, array, logger)(createStore)

function configureStore(onComplete: ?()=> void) {
    const store = createCassiStore(rootReducers, initialState);
    if (isDebuggingInChrome) {
        window.store = store;
    }
    return store;
}

module.exports = configureStore;

folder: reduders/user.js

'use strict'

import { createReducer } from 'redux-immutablejs'
import { fromJS } from 'immutable'

const initialState = fromJS({
    isLoggedIn: false,
    name: null,
    session_id: null,
    email: null,
    uid: null,
})

const user = createReducer(initialState, {
    'LOGGED_IN': (state, action) => state.merge({
        user: {
            isLoggedIn: true,
            ...action.data
        }
    })
});

module.exports = user

folder reducers/index.js

'use strict'

import {combineReducers} from 'redux-immutablejs';
import {reducer as formReducer} from 'redux-form/immutable';
import {userReducer} from './user';

export default combineReducers({
    form: formReducer,
    user: userReducer
});

folder components/MyNavigator.js

import { connect } from 'react-redux';
import React from 'react';
class MyNavigator extends React.Component {
     render() {
        return (
            <Navigator
                ref="navigator"
                style={{ backgroundColor: '#fff', flex: 1 }}
                initialRoute={{}}
                renderScene={this.renderScene}
            />
        );
    }

    renderScene(route, navigator) {
        if(route.signup)
            return <SignUpScene navigator={navigator} />
        if(route.home)
            return <HomeScene navigator={navigator}/>
        return <LoginScene navigator={navigator} />
    }
}
const mapStateToProps = state => {
    return {
        isLoggedIn: state.user.isLoggedIn || false // error here cannot get user of undefined
    }
}

module.exports = connect(mapStateToProps)(MyNavigator);

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions