React/Redux:可以发送动作的全局功能?

djb*_*ery 14 reactjs redux

我希望将React/Redux函数实现为具有调度操作能力的全局实用程序.

不是组件/容器.简单的全局/静态函数,可以被其他人导入和调用.

这可能吗?

提前感谢您提供的任何想法/建议!

Aar*_*all 23

dispatch来自于Store你只需要一个全局参考你的Store.

因此,假设您的应用程序root看起来像这样:

const store = createStore(rootReducer);

ReactDOM.render(<Provider store={store} /> ...);
Run Code Online (Sandbox Code Playgroud)

只需导出store:

export const store = createStore(root);
Run Code Online (Sandbox Code Playgroud)

并从您的静态util导入商店:

import {store} from "../path/to/app/root";

store.dispatch({ ... });
Run Code Online (Sandbox Code Playgroud)

更好的方法是将util函数dispatch作为参数接受,这样就没有全局引用了store.

  • 具有讽刺意味的是“要避免使用全局模式......”这正是 redux 的含义。引用数据的全局方式。这个解决方案很实用。 (2认同)

Gry*_*ynn 5

我是老派;在 app.js 中我会这样做:

window.store = store
Run Code Online (Sandbox Code Playgroud)

就是这样 - 存储全局公开,无需导入等。这将破坏服务器端渲染,但如果您在任何情况下使用全局调度,就会破坏。请参阅此推特帖子:https://twitter.com/Grynn/status/955485816389685248

引用 Dan Abramov 的回复(在上面的帖子中):

使测试变得更加困难,如果页面中有多个此类应用程序就会中断(这在大型产品的实践中会发生),使服务器渲染变得不可能。否则肯定没问题