自定义传奇中的路由推送不会导致重新渲染
route push in custom saga does not cause re-render
我有一个自定义 saga,它响应一个简单的搜索用户操作,如果它找到一个用户,它应该显示它,否则转到用户列表。
问题是,当我推送新路线时,我可以看到状态发生变化,但应用程序没有呈现新路线。我查看了源代码,但找不到任何更新阻止程序。
如果我执行两次推送操作,出于某种原因,只会导致位置键再次更改,应用程序会正确重新呈现。不知道该往哪里看,所以对问题出在哪里有什么想法吗?
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)]);
}
正在使用 gatsbyjs。我切换到 Create React App 进行构建,所有问题都消失了。
我有一个自定义 saga,它响应一个简单的搜索用户操作,如果它找到一个用户,它应该显示它,否则转到用户列表。
问题是,当我推送新路线时,我可以看到状态发生变化,但应用程序没有呈现新路线。我查看了源代码,但找不到任何更新阻止程序。
如果我执行两次推送操作,出于某种原因,只会导致位置键再次更改,应用程序会正确重新呈现。不知道该往哪里看,所以对问题出在哪里有什么想法吗?
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)]);
}
正在使用 gatsbyjs。我切换到 Create React App 进行构建,所有问题都消失了。