2017-08-04 81 views
0

我正在使用redux-saga与reactjs一起。我正在使用mapDispatchToProps触发onClick更改与值,但我越来越错误说派遣没有定义任何人请让我知道如何解决这个萨格方式?未捕获的错误:调度不是函数

import { connect } from 'react-redux'; 
import { updateModifiedValue } from "../actions/programActions"; 

import { bindActionCreators } from 'redux'; 

export class ProgramProfileContainer extends React.Component { 
render() { 

     return (
     <div> 


      <ProgramVolumeComponent 
       updateModifiedGrowth = {(value) => updateModifiedValue(value,this.props.match.params.program_id)} 

      /> 



      </div> 
     ) 
    } 
} 
const mapStateToProps = (state) => { 
    console.log("update state", state) 

    return { 
     programProfileData: state.programDetailReducer.programDetails, 

    } 
} 
const mapDispatchToProps= (dispatch) => (
    bindActionCreators({updateModifiedValue},dispatch) 
) 
export default connect(
    mapStateToProps, 
    mapDispatchToProps)(ProgramProfileContainer) 

这是我的行动

export function updateModifiedValue(Value,Id){ 
    console.log("mval",Value) 
    console.log("id",Id) 
    return { 
     type:types.MODIFIED_GROWTH, 
     growthValue 
    } 
} 

这里是我的索引传奇

export default function* startForman() { 
    console.log("index saga") 
    yield fork(watcher); 
} 

观察家

export default function* watcher(){ 

    yield takeLatest(types.LISTS,myCallSaaga) 

} 

和我calll SAAGA

export default function* myCallSaaga({Value,Id}){ 
    const array=[Value,Id] 

    try { 
     const Data = yield call(growthdetail,...array) 
     yield [ 
      put({ type: types.MODIFIED, Detail: Data }) 
     ] 
    } catch (error) { 
     yield put({ 
      type: 'FETCH_ERROR', 
      error 
     }); 
    } 
} 

和我减速

export default function(state=[],action){ 
    switch(action.type){ 
     case types.PRO_LIST: 
       return [...state,action.List] 

     case types.MODIFIED: 
    return {...state,growth:4} 


     default: 
     return state 
    } 
} 
+0

首先,像下面这样为你的'mapDispatchToProps'添加一个返回值:'return bindActionCreators ....'。然后在你的'ProgramProfileContainer'中,改为使用'updateModifiedValue'作为'this.props.updateModifiedValue'。这是因为你的动作创造者被包裹着'dispatch',并且已经被合并到你的组件的道具中,允许你自动发送到商店 – Rowland

+0

2东西我添加了圆括号,所以我不需要返回和雅第二件事我已经更新但仍然得到相同的错误 – LowCool

回答

0

我认为错误是,你是直接从您的进口从你的道具,这是mapDispatchToProps是调用行动,而不是。试试这个:从罗兰的评论

import programActionsCreator from "../actions/programActions"; 
... 
render() { 
    const { updateModifiedValue } = this.props.actions; 

    return() { 
    ... 
    updateModifiedGrowth = {(value) => updateModifiedValue(value, this.props.match.params.program_id)} 
    ... 
    } 
    ... 

const mapDispatchToProps= (dispatch) => ({ 
    actions: bindActionCreators(programActionsCreator, dispatch) 
}) 
+0

你可以请求告诉我什么是在programActionCreator?第二件事我没有看到任何行动对象在我this.props – LowCool

+0

我可以看到this.props中的行动。但它没有updateModifiedValue值 – LowCool

0

,并从该github post我做喜欢改变了这种

const mapDispatchToProps= (dispatch) => { 
return { dispatch, 
    ...bindActionCreators({ 
    updateModifiedValue 
    }, dispatch)}//bindActionCreators({updateModifiedValue},dispatch) 
} 

<ProgramVolumeComponent 
       updateModifiedGrowth = {(value) => this.props.updateModifiedValue(value,this.props.match.params.program_id)} 

      /> 

基本上我们需要通过我们自己的调度我们mapDispatchToProps

相关问题