redux操作调用其他操作失败

时间:2018-09-13 07:28:54

标签: reactjs redux

首先,我想调用操作“ CLICK_SEARCH”以获取服务器的响应 然后将响应传递给“ CLICK_SEARCH2”以更新商店。

但是它失败了,控制台结果显示为“ CLICK_SEARCH”而不是“ CLICK_SEARCH2”,并且action.payload是未定义的。有人帮忙吗?

        RecyclerView normalImageDisplay=layout.findViewById(R.id.recycler_view);
        normalImageDisplay.setAdapter(new NewsSlidingFullImageAdapter(context,nhBean.getImageUrl()));
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false)
        {
            @Override
            public boolean canScrollVertically() {
                return false;
            }
        };
        normalImageDisplay.setLayoutManager(mLayoutManager);
        SnapHelper snapHelper = new PagerSnapHelper();
        snapHelper.attachToRecyclerView(normalImageDisplay);

3 个答案:

答案 0 :(得分:0)

您是否尝试过声明动作类型的常量?就这么简单:

const CLICK_SEARCH = 'CLICK_SEARCH';
const CLICK_SEARCH2 = 'CLICK_SEARCH2';

function reducreForSeach(state = initialState3, action) {
   //...other parts of the code
   switch(action.type) {
      case CLICK_SEARCH: {

         //...

         dispatch({ type: CLICK_SEARCH2,

      //...

      case CLICK_SEARCH2: {

      //...

答案 1 :(得分:0)

dispatch从未定义或馈送到函数reducreForSeach,因此它将始终无法调用CLICK_SEARCH2。

Redux不直接支持连锁动作。您可以自己实现,但我建议您研究redux-thunkredux-saga之类的流行库,以了解如何根据其他操作的结果来调用操作。它们都有详细的记录,并在Redux's official website

中推荐

答案 2 :(得分:0)

您不想在化简器中做这些事情,因为它们本来就是纯函数。

您可以使用redux-thunk从动作生成器中调度其他动作,这使您能够从动作生成器返回函数。

返回的函数将以dispatch作为道具被调用,并允许您从回调内部进一步调度动作。

例如

export const mySearchActionGenerator = keyword => dispatch => {
    dispatch ({
       type: actionTypes.MY_SEARCH_ACTION
       keyword
    });
    dispatch ({
       type: actionTypes.MY_SEARCH_ACTION
       keyword
    });
}

另一种选择是使用redux-saga,它允许进行更复杂的设置。