首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确配置redux-thunk?

如何正确配置redux-thunk?
EN

Stack Overflow用户
提问于 2018-01-25 23:58:30
回答 1查看 312关注 0票数 1

我一直在尝试实现一个ChatApp,以便学习Reactive原住民。我正在尝试使用redux-thunk,以便在防火墙中注册用户。

我遇到的问题是,每个人的例子/解释似乎都略有不同。有点困惑。有人能解释我做错了什么吗?

//减速机

代码语言:javascript
复制
import * as types from './actionTypes'

const initialState = {
  restoring: false,
  loading: false,
  user: null,
  error: null,
}

const session = (state = initialState, action) => {
  switch(action.type) {
    case types.SESSION_RESTORING:
      return { ...state, restoring: true }
    case types.SESSION_LOADING:
      return { ...state, restoring: false, loading: true, error: null }
    case types.SESSION_SUCCESS:
      return { restoring: false, loading: false, user: action.user, error: null }
    case types.SESSION_ERROR:
      return { restoring: false, loading: false, user: null, error: action.error }
    case types.SESSION_LOGOUT:
      return initialState
    default:
      return state
  }
}

export default session

//行动

代码语言:javascript
复制
import * as types from './actionTypes'
import firebaseService from '../../services/firebase'

export const signupUser = (email, password) => {
  return (dispatch) => {
    dispatch(sessionLoading())

    firebaseService.auth()
      .createUserWithEmailAndPassword(email, password)
      .catch(
        error => {
          dispatch(sessionError(error.message))
        }
      )

    let unsubscribe = firebaseService.auth()
      .onAuthStateChanged(
        user => {
          if (user) {
            dispatch(sessionSuccess(user))
            unsubscribe()
          }
        }
      )
  }
}

//Actions

const sessionSuccess = (user) => ({
  type: types.SESSION_SUCCESS,
  user
})

const sessionLoading = () => {
  type: types.SESSION_LOADING
}

const sessionError = (error) => {
  type: types.SESSION_ERROR,
  error
}

//配置存储

代码语言:javascript
复制
import { createStore, applyMiddleware, compose } from 'redux'
import thunk from 'redux-thunk'
import reducer from './session'

const configureStore = () => {

  // eslint-disable-next-line no-underscore-dangle
  return createStore(reducer, compose(applyMiddleware(thunk)))
}

export default configureStore

//创建存储

代码语言:javascript
复制
import React from 'react'
import { Provider } from 'react-redux'
import configureStore from './store'

import Screen from './screens/Authorization'

const store = configureStore()

const App = () =>
  <Provider store={store}>
    <Screen />
  </Provider>


export default App

// MapDispatchToProps

代码语言:javascript
复制
import React from 'react'
import PropTypes from 'prop-types'
import { connect } from 'react-redux'
import SignupComponent from './Component'
import { signupUser } from '../../../store/session/actions'

const SignupContainer = (props) =>
  <SignupComponent signupUser={props.signup}/>

SignupContainer.propTypes = {
  signup: PropTypes.func.isRequired
}

const mapDispatchToProps = {
  signup: signupUser
}

export default connect(null, mapDispatchToProps)(SignupContainer)

我得到的错误是:

动作必须是普通的对象。使用自定义中间件进行异步操作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-26 00:09:43

如果要使用这样的箭头函数,则需要将对象包装为parens:

代码语言:javascript
复制
const sessionLoading = () => ({
  type: types.SESSION_LOADING
})

const sessionError = (error) => ({
  type: types.SESSION_ERROR,
  error
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48453862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档