React-native-router-flux: Version for Redux integration ??

Created on 21 Apr 2016  路  12Comments  路  Source: aksonov/react-native-router-flux

Which version has Redux integration 3.22.4 or 3.22.5?

I have this error:

Unhandled JS Exception: (0 , _redux.connect) is not a function

import React, { Component }                               from 'react-native'
import { createStore, applyMiddleware, combineReducers, connect }  from 'redux'
import { Actions, Router, Reducer }                       from 'react-native-router-flux'
import { middleware as netInfo }                          from './Middleware/redux-middleware-react-native-netinfo'
import { Provider }                                       from 'react-redux'
import thunk                                              from 'redux-thunk'
import createLogger                                       from 'redux-logger'
import { getAuth }                                        from './Lib/auth'

import * as reducers                                      from './reducers'
import { checkConnection }                                from './actions/NetworkActions'
import Routes                                             from './routes';

const RouterWithRedux = connect()(Router)
const logger = createLogger()
const createStoreWithMiddleware = applyMiddleware(thunk, logger, netInfo)(createStore)
const reducer = combineReducers(reducers)
const store = createStoreWithMiddleware(reducer)

export default class App extends Component {
  render() {
    return (
      <Provider store={store}>
        <RouterWithRedux>
          <Routes />
        </RouterWithRedux>
      </Provider>
    );
  }
}

Most helpful comment

Just typo for connect import...

All 12 comments

Please check 3.22.5

You should insert scenes instead of Routes, check updated readme

I just do not understand what is wrong with it, i post a questions on stackoverflow...

import React, { Component }                   from 'react-native'
import {
  createStore,
  applyMiddleware,
  combineReducers,
  connect }                                   from 'redux'
import {
  Router,
  Reducer,
  Actions,
  Scene,
  Switch,
  Modal
}                                             from 'react-native-router-flux'
import { middleware as netInfo }              from './Middleware/redux-middleware-react-native-netinfo'
import { Provider }                           from 'react-redux'
import thunk                                  from 'redux-thunk'
import createLogger                           from 'redux-logger'
import { getAuth }                            from './Lib/auth'

import * as reducers                          from './reducers'
import { checkConnection }                    from './actions/NetworkActions'

import SignIn                 from './Containers/SignIn'
import SignUp                 from './Containers/SignUp'
import Search                 from './Containers/Search'
import OTPScreen              from './Containers/OTPScreen'
import FDrawer                from './Components/FDrawer'

const selectorCheck = (user) => {

  if ( user && ( user.auth_token || user.isGuest ) ) {
    return 'drawer'
  }
  return 'auth'
}

const logger = createLogger()
const createStoreWithMiddleware = applyMiddleware(thunk, logger, netInfo)(createStore)
const reducer = combineReducers(reducers)
const store = createStoreWithMiddleware(reducer)

const RouterWithRedux = connect()(Router)

//Carica l'Auth da Realm allo Store
getAuth( store )
//Controlla lo stato della connessione all'avvio
store.dispatch(checkConnection())

export default class App extends Component {
  render() {
    return (
      <Provider store={store}>
        <RouterWithRedux>
          <Scene key="modal" component={Modal}>
            <Scene key="root"
              hideNavBar={true}
              component={connect(state=>({user:state.user}))(Switch)}
              selector={ ({ user }) => selectorCheck(user) }
              tabs={true}
              >
              <Scene key="auth"
                titleStyle={{ fontSize: 20, fontFamily: 'Avenir-Roman', color: 'white' }}
                navigationBarStyle={{ backgroundColor: '#1db198', height: 80, borderBottomWidth: 0 }}
                >
                <Scene key="signin" component={SignIn} title="Accedi all'App" type="replace" direction="vertical" initial={true} />
                <Scene key="signup" component={SignUp} title="Crea il tuo account" direction="vertical" />
                <Scene key="otpScreen" component={OTPScreen} title="Verifica di sicurezza" direction="vertical" />
              </Scene>
              <Scene key="drawer" component={FDrawer} >
                <Scene key="main" titleStyle={{ fontSize: 20, fontFamily: 'Avenir-Roman', color: 'white' }} navigationBarStyle={{ backgroundColor: '#1db198', height: 80, borderBottomWidth: 0 }} >
                  <Scene key="search" component={Search} title="Search" type="replace" initial={true} />
                </Scene>
              </Scene>
            </Scene>
          </Scene>
        </RouterWithRedux>
      </Provider>
    );
  }
}

export default App

Looks like exception not from this component, do you have full stack?

Yes, is a Redux exception...not?

package.json

{
  "name": "test",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start"
  },
  "dependencies": {
    "react": "^0.14.8",
    "react-native": "^0.22.2",
    "react-native-drawer": "^2.0.0",
    "react-native-dropdown": "0.0.6",
    "react-native-router-flux": "^3.22.5",
    "react-redux": "^4.4.1",
    "realm": "^0.11.1",
    "redux": "^3.3.1",
    "redux-logger": "^2.6.1",
    "redux-middleware-oneshot": "^0.1.1",
    "redux-thunk": "^2.0.1"
  },
  "devDependencies": {
    "eslint": "^2.8.0",
    "eslint-config-airbnb": "^7.0.0",
    "eslint-plugin-import": "^1.5.0",
    "eslint-plugin-jsx-a11y": "^1.0.2",
    "eslint-plugin-react": "^5.0.1",
    "redux-devtools": "^3.1.1",
    "remote-redux-devtools": "^0.1.5"
  }
}

The component DOESN"T depend from redux. It just uses 'this.props.dispatch' if it is provided.
Do you have full error stack?

Yes,
schermata 2016-04-22 alle 09 53 45

Do you see anywhere files from this component?

I have a reducers.js

// routes.js

const initialState = {
  scene: {},
};

export default function reducer(state = initialState, action = {}) {
  switch (action.type) {
    // focus action is dispatched when a new screen comes into focus
    case "focus":
      return {
        ...state,
        scene: action.scene,
      };

    // ...other actions

    default:
      return state;
  }
}

and combine reducers in app.js

What do you mean with 'Do you see anywhere files from this component'?

I have this error at the startup.

I can't call connect() in the app.js, not?

Ok, i have a solution:

routes.js

import React                  from 'react-native'
import {
  Scene,
  Switch,
  Modal,
  Router
}                             from 'react-native-router-flux'
import { connect }            from 'react-redux'

import SignIn                 from './Containers/SignIn'
import SignUp                 from './Containers/SignUp'
import Search                 from './Containers/Search'
import OTPScreen              from './Containers/OTPScreen'
import FDrawer                from './Components/FDrawer'

const selectorCheck = (user) => {

  if ( user && ( user.auth_token || user.isGuest ) ) {
    return 'drawer'
  }
  return 'auth'
}

const RouterWithRedux = connect()(Router)

class Routes extends React.Component {

  render () {
    return (
      <RouterWithRedux>
        <Scene key="modal" component={Modal}>
          <Scene key="root"
            hideNavBar={true}
            component={connect(state=>({user:state.user}))(Switch)}
            selector={ ({ user }) => selectorCheck(user) }
            tabs={true}
            >
            <Scene key="auth" >
              <Scene key="signin" component={SignIn} title="Accedi all'App" type="replace" direction="vertical" initial={true} />
              <Scene key="signup" component={SignUp} title="Crea il tuo account" direction="vertical" />
              <Scene key="otpScreen" component={OTPScreen} title="Verifica di sicurezza" direction="vertical" />
            </Scene>
            <Scene key="drawer" component={FDrawer} >
              <Scene key="main" >
                <Scene key="search" component={Search} title="Search" type="replace" initial={true} />
              </Scene>
            </Scene>
          </Scene>
        </Scene>
      </RouterWithRedux>
    );
  }
}

export default Routes

app.js

import React, { Component }                   from 'react-native'
import {
  createStore,
  applyMiddleware,
  combineReducers
}                                             from 'redux'
import { middleware as netInfo }              from './Middleware/redux-middleware-react-native-netinfo'
import { Provider }                           from 'react-redux'
import thunk                                  from 'redux-thunk'
import createLogger                           from 'redux-logger'
import { getAuth }                            from './Lib/auth'

import * as reducers                          from './reducers'
import { checkConnection }                    from './actions/NetworkActions'
import Routes                                 from './routes';

const logger = createLogger()
const createStoreWithMiddleware = applyMiddleware(thunk, logger, netInfo)(createStore)
const reducer = combineReducers(reducers)
const store = createStoreWithMiddleware(reducer)

export default class App extends Component {
  render() {
    return (
      <Provider store={store}>
          <Routes />
      </Provider>
    );
  }
}


export default App

Just typo for connect import...

Was this page helpful?
0 / 5 - 0 ratings

Related issues

booboothefool picture booboothefool  路  3Comments

rafaelcorreiapoli picture rafaelcorreiapoli  路  3Comments

YouYII picture YouYII  路  3Comments

jgibbons picture jgibbons  路  3Comments

xnog picture xnog  路  3Comments