Javascript 调试时,我可以从浏览器控制台访问Redux存储吗?
我对我的Javascript 调试时,我可以从浏览器控制台访问Redux存储吗?,javascript,reactjs,redux,Javascript,Reactjs,Redux,我对我的减速机进行了单元测试。但是,当我在浏览器中调试时,我想检查是否正确调用了我的操作,以及是否相应地修改了状态 我要找的东西是: window._redux.store 。。。在浏览器中,这样我就可以在控制台上键入,并检查情况 如何实现这一点?您可以使用日志中间件: 或者,您可以将日志记录更改为仅附加到全局数组(您的窗口。_redux),并在需要特定状态的信息时查看数组。让store=createStore(yourApp); window.store=商店 现在,您可以通过控制台中的wi
减速机进行了单元测试。但是,当我在浏览器中调试时,我想检查是否正确调用了我的操作,以及是否相应地修改了状态
我要找的东西是:
window._redux.store
。。。在浏览器中,这样我就可以在控制台上键入,并检查情况
如何实现这一点?您可以使用日志中间件:
或者,您可以将日志记录更改为仅附加到全局数组(您的窗口。_redux
),并在需要特定状态的信息时查看数组。让store=createStore(yourApp);
window.store=商店代码>
现在,您可以通过控制台中的window.store访问存储,如下所示:
window.store.dispatch({type:“MY_ACTION”})
如何在任何网站上查看redux store,而无需更改代码
更新日期:2019年11月
自我最初的回答以来,react开发工具已经发生了变化。chrome开发工具中新的components
选项卡仍然有数据,但您可能需要进行更多的搜索
开放式镀铬工具
选择react devtool的组件
选项卡
单击最上面的节点,在右侧列中查找要显示的store
在树下重复第3步,直到找到存储
(对我来说,这是第4级)
现在,您可以使用$r.store.getState()
原始答案
如果运行了react developer工具,则可以使用$r.store.getState()代码>使用不更改代码库
注意:您必须首先在“开发人员工具”窗口中打开react devtool才能执行此操作,否则将出现$r未定义的错误
开放式开发工具
单击“反应”选项卡
确保选择了提供程序节点(或最顶层节点)
然后键入$r.store.getState()
或$r.store.dispatch({type:“MY_ACTION”})
到您的控制台中
如果要查看用于调试的存储状态,可以执行以下操作:
#import global from 'window-or-global'
const store = createStore(reducer)
const onStateChange = (function (global) {
global._state = this.getState()
}.bind(store, global))
store.subscribe(onStateChange)
onStateChange()
console.info('Application state is available via global _state object.', '_state=', global._state)
如果您正在使用,您可以通过以下方式访问存储:窗口。\uuuuu NEXT\u REDUX\u store\uuuuu.getState()
您也可以调度操作,只需查看窗口中的选项。\uuuuu NEXT\u REDUX\u store\uuu
使用react开发者工具:
const store = [...__REACT_DEVTOOLS_GLOBAL_HOOK__.reactDevtoolsAgent.internalInstancesById.values()].find(e=>e.elementType.name==="Provider").pendingProps.store
首先,您需要在窗口
对象中定义存储(您可以将其放置在配置存储
文件中):
然后,您只需在控制台中写入以下内容:
window.store.getState();
跳转这有帮助。另一个答案建议将存储添加到窗口中,但如果您只想作为对象访问存储,可以在窗口中定义一个getter
此代码需要添加到您已配置存储的位置-在我的应用程序中,此文件与调用
的位置相同
现在,您可以在控制台中键入reduxStore
以获取对象,然后键入copy(reduxStore)
将其复制到剪贴板
Object.defineProperty(window, 'reduxStore', {
get() {
return store.getState();
},
});
您可以将其包装在if(process.env.NODE_env==“development”)
中,以便在生产中禁用它。推荐的解决方案对我不起作用
正确的命令是:
$r.props.store.getState()
作为一个旁注,您可以考虑使用Auto来可视化您的操作和结果状态。谈到安全性,在生产生成模式中,是否可以从浏览器控制台读取存储?@ JRICHARDSZ,也可以访问状态:<代码>窗口> Stest.GETStEATE()/<代码>或更好,使用类似这样的库:从“./reducers/”导入还原器,然后您可以使用let store=createStoreWithMiddleware(还原器),因为“./reducers/”文件中通常会包含合并还原器。注意:要使其起作用,您需要将状态
存储为根组件上的属性。如果您遵循并将
作为顶级组件,这将很好地工作。只是被它咬了一口!请尝试$r.state.store.getState()
看起来像$r
指的是开发工具的组件部分中当前选定的组件。我似乎无法通过$r
访问整个存储
,可能是因为我到处都在使用挂钩,但我可以看到我的组件可以看到的存储部分,这几乎是一样好的,有时更切题<代码>$r.hooks[0]。子目录[0]。子目录[0]。value.store.getState()
适用于使用选择器的组件。。。Ob.,YMMV取决于您使用的钩子…我必须使用$r.props.store
默认情况下,控制台中的store未定义。它是如何到达的?需要先在window对象中定义Store,然后才能使用它。@RafaelRozon是的,你是对的,我编辑了我的答案以显示它。givesUncaught TypeError:无法读取未定义的属性“值”
Error应该是对这些答案的注释
Object.defineProperty(window, 'reduxStore', {
get() {
return store.getState();
},
});
$r.props.store.getState()