toa*_*ies 5 javascript reactjs redux
更新:我已经从第一篇文章中缩小了问题的范围。请查看最新更新。问题似乎与操作负载的大小或复杂性有关,而不是因为操作是在异步调用之后调用的。
我正在开发一个 react/redux 应用程序,并且在使用 redux dev tools chrome 扩展中的时间旅行功能时遇到了问题。
当我在滑块监视器中重播应用程序时,不会重播对 webapi 操作的第一次异步调用。除了第一个之外的所有同步操作和异步网络调用都可以正常工作。它只是第一个不渲染的。我试过只使用 redux-thunk 来实现异步,但也尝试过使用 redux-saga(当前配置)。我在 webpack-dev-server 中运行应用程序
应用程序本身正在运行(所有代码都在打字稿中)
我尝试了各种配置更改,但似乎没有任何效果。任何想法将不胜感激。
这是我的 configureStore 文件
function configureStore() {
const sagaMiddleware = createSagaMiddleware()
const store = createStore(rootreducer, compose(
applyMiddleware(invariant(), sagaMiddleware, thunk),
window.devToolsExtension ? window.devToolsExtension() : (f:any) => f
));
if (window.devToolsExtension) window.devToolsExtension.updateStore(store);
sagaMiddleware.run(logsSaga)
return store;
}
export default configureStore;
Run Code Online (Sandbox Code Playgroud)
我的传奇
function* fetchLogs(logSearchParams: any) {
try {
const data = yield call(getLogTableData,
logSearchParams.params);
yield put({type: "ReceiveLogs",
data, logSearchParams:logSearchParams.params});
} catch (e) {
yield put({type: "LogsError", message: e.message});
}
}
export function* logsSaga() {
yield* takeEvery("RequestLogs", fetchLogs);
}
Run Code Online (Sandbox Code Playgroud)
和网络电话
return window.fetch('api/logs/gettable', {
method: 'post',
body: JSON.stringify(logSearchParams),
headers: headers
}).then(r => r.json());
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
编辑:我正在使用 Redux-React 和连接装饰器将 Redux 与组件连接起来。动作是从 actionCreator 调用的
export let searchClicked = () => {
return (dispatch, getState) => {
let params = getSearchParms(getState());
return dispatch({type:'RequestLogs', params});
}
};
Run Code Online (Sandbox Code Playgroud)
这使用 React-Redux mapDispatchToProps 连接到组件单击处理程序
另外两个组件通过 mapStateToProps 接收状态,例如
function mapStateToProps(state) {
return state.logs;
}
Run Code Online (Sandbox Code Playgroud)
当我调试这个函数时,它应该是(并且是之后)
更新:我已经将问题追溯到“ReceiveLogs”的减速器,它由 Redux-Saga 调用。我为这个动作准备了三个减速器。如果我注释掉这一行
case "ReceiveLogs":
return {data:action.data.rows, selected:state.selected}
Run Code Online (Sandbox Code Playgroud)
然后其他依赖减速器执行此操作的组件正常工作,并且开发工具重放按预期工作。使用这条线,它失败了。问题似乎是“data:action.data.rows”。行是一个数组,如果我将其更改为返回一个空数组,则重放工作。
我想我今天会放弃。
更新:看来问题可能与作为 ReceiveLogs 负载的一部分发送的数组的大小有关。如果我通过切片来限制数组的大小,例如
返回 {data:action.data.rows.slice(0, 3), selected:state.selected}
那么它的工作原理。如果我包含数组的第 4 个成员,则它不起作用。数组的第 4 个成员明显大于其他成员,因为它包含相当大(且深)的对象。
动作负载和 redux-dev-tools 是否有某种大小限制???我会继续玩下去。
| 归档时间: |
|
| 查看次数: |
3385 次 |
| 最近记录: |