可以同时调用多个动作吗?

时间:2019-01-20 13:53:56

标签: reactjs react-native redux

我有多个reducer,单击一次时我需要为它们分别发送单独的动作,

<TouchableOpacity
    style={[styles.button, styles.edit]}
    onPress={()=>{
       this.props.toggleCurrentTask(this.props.task);
       this.props.triggerUpdating(id);
    }}
>
   <Text>Edit</Text>
</TouchableOpacity>

但是toggleCurrentTask的操作无效,我苦苦挣扎了一段时间,最后只需更换它们就解决了我的问题! 像这样:

onPress={()=>{
   this.props.triggerUpdating(id);
   this.props.toggleCurrentTask(this.props.task);
}}

所以我认为也许同时调用两个动作是一个不好的做法。如果是这样,我该怎么办?

1 个答案:

答案 0 :(得分:2)

这很好,但是您也可以让不同的化简器对相同的动作(类型)做出反应:在您的示例中,存储updating状态的化简器可以在分派toggleCurrentTask动作时更改其状态。 :

const TOGGLE_CURRENT_TASK = 'task/TOGGLE_CURRENT_TASK';

/* update reducer */

const updatingState = {
    isUpdating: false
}

const updatingReducer = (state = updatingState, action) => {
    switch (action.type) {
        case TOGGLE_CURRENT_TASK:
            return {
                ...state,
                isUpdating: true
            }
    }
}

/* task reducer */
const taskState = {}

const taskReducer = (state = taskState, action) => {
    switch(action.type) {
        case TOGGLE_CURRENT_TASK:
            return {
                ...state,
                activeTasks: action.task
            }
    }
}

IMO可以使您的React组件更整洁并扩展得更好,想象一下您必须在事件处理程序中分派五个不同的动作,而不仅仅是两个。