代码之家  ›  专栏  ›  技术社区  ›  twDuke

路由推入自定义saga不会导致重新渲染

  •  0
  • twDuke  · 技术社区  · 7 年前

    我有一个自定义的传奇,它响应一个简单的搜索用户操作,如果它找到一个用户,它应该显示它,否则转到用户列表。

    问题是,当我推送新路线时,我可以看到状态发生了变化,但应用程序没有呈现新路线。我查看了源代码,没有找到任何更新阻止程序。

    如果出于某种原因,我两次执行推送操作,只会导致位置键再次更改,则应用程序会重新正确呈现。不知道该去哪里找,所以你知道问题出在哪里吗?

    import { put, takeEvery, all, call } from "redux-saga/effects";
    import { searchUser } from "../services/userService";
    import { SEARCH_USER } from "../actions/searchUser";
    import { showNotification } from "admin-on-rest";
    import { push, replace } from "react-router-redux";
    
    function* handleSearchUser(action) {
    try {
        const { searchParam } = action.payload;
        const filter = {};
        if (isNaN(searchParam)) {
          filter.Email = searchParam;
       }  else {
          filter.UserId = parseInt(searchParam);
    }
        const result = yield call(searchUser, 0, 25, filter);
    
        if (result && result.length === 1) {
          // Duplicate this row and the page re-renders the correct page
          yield put(push(`/User/${result[0].UserId}/show`));
        } else {
          yield put(
            push(
              `/User?filter=${JSON.stringify(
                filter
              )}&order=DESC&sort=id&page=1&perPage=25`
            )
          );
        }
      } catch (error) {
        console.error(error);
        yield put(showNotification("Error: error when searching", "warning"));
      }
    }
    
    export default function* searchUserSaga() {
      yield all([takeEvery(SEARCH_USER, handleSearchUser)]);
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   twDuke    7 年前

    正在使用gatsbyjs。我切换到创建React建筑应用程序,所有问题都解决了。