APSL / redux-i18n

A simple and powerful package for translate your react applications using react-redux.
MIT License
233 stars 52 forks source link

how to pass to setLanguage to mapDispatchToProps #89

Closed sorokinvj closed 6 years ago

sorokinvj commented 6 years ago

hi, I believe this is very stupid question from the very beginner (which I am), but I'm stuck, so please help!

In my component which is connect via connect() I initialize mapDispatchToProps in order to get access to actions:

import * as newsActions from '../actions/news'
import * as langActions from '../actions/lang'

const mapStateToProps = state => {
  const { language } = state
  const { lang } = state.i18nState
  return { language, lang }
}

const mapDispatchToProps = dispatch => {
  return bindActionCreators(Object.assign({},
    langActions, 
    newsActions
  ), dispatch)
}

export default connect(mapStateToProps, mapDispatchToProps)(Nav);

However if import setLanguage and add it inside Object.assign nothing happens and I don't see setLanguage in my props, so this doesn't work:

const mapDispatchToProps = dispatch => {
  return bindActionCreators(Object.assign({},
    langActions, 
    newsActions, 
    setLanguage
  ), dispatch)
}

However, I need to do it this way, I can't just use dispatch(setLanguage) because I don't have dispatch available at my props. Though if I delete mapDispatchToProps than I have dispatch available and everything works fine.

So how do I add setLanguage to my functions in mapDispatchToProps?

sorokinvj commented 6 years ago

Oh I got it!

In case somebody is interested I just made everything in my action file: (don't pay attention to const changeLanguage, it is my old way of changing locale in order to get the right content from API)

import { SWITCH_LANGUAGE } from './action_types.js'
import { setLanguage } from "redux-i18n"

const changeLanguage = (language) => ({type: SWITCH_LANGUAGE, language })

export const switchLanguage = (language) => (dispatch) => {
    dispatch(changeLanguage(language));
    dispatch(setLanguage(language));
}