gpt4 book ai didi

javascript - Redux 开发工具不适用于大型操作负载

转载 作者:行者123 更新时间:2023-12-03 13:38:29 25 4
gpt4 key购买 nike

更新:从第一篇文章开始,我已经缩小了问题的范围。请查看最新更新。问题似乎与操作有效负载的大小或复杂性有关,而不是因为该操作是在异步调用之后调用的。

我正在开发一个 React/Redux 应用程序,并且在使用 Redux 开发工具 Chrome 扩展中的时间旅行功能时遇到问题。

当我在 slider 监视器中重播应用程序时,对 webapi 操作的第一个异步调用不会重播。除第一个之外的所有同步操作和异步网络调用都可以正常工作。它只是第一个不渲染的。我尝试过仅使用 redux-thunk 进行异步,但也尝试过使用 redux-saga (当前配置)。我在 webpack-dev-server 中运行应用程序

应用程序本身是工作函数(所有代码都在 typescript 中)

我尝试了各种配置更改,但似乎没有任何效果。任何想法将不胜感激。

这是我的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;

我的传奇

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);
}

和网络调用

return window.fetch('api/logs/gettable', {
method: 'post',
body: JSON.stringify(logSearchParams),
headers: headers
}).then(r => r.json());

感谢您的帮助

编辑:我正在使用 Redux-React 和 connect 装饰器将 Redux 与组件连接起来。该操作是从 actionCreator 调用的

export let searchClicked = () => {
return (dispatch, getState) => {

let params = getSearchParms(getState());

return dispatch({type:'RequestLogs', params});
}
};

使用 React-Redux mapDispatchToProps 连接到组件点击处理程序

例如,另外两个组件通过 mapStateToProps 接收状态

 function mapStateToProps(state) {

return state.logs;
}

当我调试这个函数时,它应该被调用(并且之后会被调用),但它没有被调用

更新:我已将问题追溯到“ReceiveLogs”的 reducer ,该 reducer 由 Redux-Saga 调用。我有三个 reducer 用于此操作。如果我注释掉这一行

case "ReceiveLogs":
return {data:action.data.rows, selected:state.selected}

然后依赖于 reducer 来执行此操作的其他组件可以正常工作,并且开发工具重播可以按预期工作。有了这条线,它就失败了。问题似乎是“data:action.data.rows”。 rows 是一个数组,如果我将其更改为返回一个空数组,则重播有效。

我想今天我会放弃。

更新:看来问题可能与作为 ReceiveLogs 有效负载的一部分发送的数组的大小有关。如果我通过切片来限制数组的大小,例如

返回 {data:action.data.rows.slice(0, 3), selected:state.selected}

然后就可以了。如果我包含数组的第四个成员,它就不起作用。数组的第四个成员比其他成员大得多,因为它包含相当大(且深)的对象。

操作有效负载和 redux-dev-tools 是否有某种大小限制???我会继续玩。

最佳答案

查看 Redux Devtools Excessive use of memory and CPU故障排除:

That is happening due to serialization of some huge objects included in the state or action. The solution is to sanitize them.

关于javascript - Redux 开发工具不适用于大型操作负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38572164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com