【问题标题】:Action.type undefined reduxAction.type 未定义的 redux
【发布时间】:2018-08-13 09:45:05
【问题描述】:

无论我做什么,我都无法摆脱错误。我经常重写动作,但错误仍然存​​在。我还在 createstore 的顶部写了 thunk。如果你能支持我一点就好了。

我的操作,这里没什么特别的,只是一个获取我的玩家的调用

import fetch from "cross-fetch"

export const SET_PLAYERS = "setplayers"
export const setPlayers = players => {
  return{
    type: "setplayers",
    players
  }
}

export const fetchPlayers = () => (dispatch, getState) => {
  return fetch("http://localhost:4444/api/players")
    .then(response => response.json())
    .then(players => {
      dispatch(setPlayers(players))
    }).catch(err => {
      console.log("Could not fetch assortments" , err)
    })
}

组件,此时只有一个假人来调用动作:

import React from "react"
import PropTypes from "prop-types"
import { fetchPlayers } from "./action"
import { connect } from "react-redux"
import EnhancedTable from "../components/list/List"
import getPlayers from "./reducer"


class PlayerTable extends React.Component {
  constructor(props) {
    super(props)

    this.state = {
    }
  }

  componentDidMount(){
    this.props.fetchPlayers()
  }



  render() {
    console.log("#######", this.props.players)
    return (
      <EnhancedTable />
    )
  }
}

PlayerTable.propTypes = {
  classes: PropTypes.object.isRequired,
}

const mapStateToProps = state => ({
  players: getPlayers(state)
})

export default connect(mapStateToProps, { fetchPlayers })(PlayerTable)

减速器

import { SET_PLAYERS } from "./action"

const setPlayers = (state={}, action) => {
  console.log("ACTION", action)
  switch (action.type) {
  case SET_PLAYERS:
    return {...state, players: action.players}
  default:
    return state
  }
}
export default setPlayers

export const getPlayers = state => ([])

组合减速器

import { combineReducers } from "redux"
import { reducer as formReducer } from "redux-form"
import  showProgressbar  from "../components/progressbar/reducer"
import  showSnackBar from "../components/snackbar/reducer"
import  setPlayers from "../player/reducer"

export default combineReducers({
  form: formReducer,
  showProgressbar,
  showSnackBar,
  setPlayers
})

创建商店

import App from "./App"
import React from "react"
import rootReducer from "./reducers"
import thunk from "redux-thunk"
import { render } from "react-dom"
import { createStore, applyMiddleware, compose } from "redux"
import { Provider } from "react-redux"
import { createLogger } from "redux-logger"

const store = createStore(
  rootReducer,
  compose(applyMiddleware(thunk),
  window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
))

render(
  <Provider store={store}>
    <App />
  </Provider>,
  /* eslint-disable*/
  document.getElementById("root")
  /* eslint-enable */
)

【问题讨论】:

  • 你能添加你的action.js吗?
  • 它是第一个。我的行动
  • 你能显示更多关于错误的信息吗
  • 未捕获类型错误:无法在 mapToPropsProxy (wrapMapToProps.js: 48)

标签: redux react-redux redux-thunk


【解决方案1】:

您已经正确定义了mapStateToProps,但您不需要为connect() 的第二个参数对mapDispatchToProps 执行相同的操作吗?

const mapStateToProps = state => ({
  players: getPlayers(state)
})

const mapDispatchToProps = dispatch => ({
  fetchPlayers() {
    dispatch(fetchPlayers())
  }
})

export default connect(mapStateToProps, mapDispatchToProps)(PlayerTable)

【讨论】:

  • 不幸的是,当我写出 mapDispatchtoProps 时没有任何变化。我仍然收到此错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 2021-08-05
  • 2019-01-15
  • 1970-01-01
  • 2017-01-17
相关资源
最近更新 更多