reactjs - REACT REDUX - 设计模式
问题描述
我有一个上面的页面,我知道最好的反应设计是一个大类(应用程序)和一个商店(如下),但我的问题是,如果我将这三个组件分成三个不同的类和 3 个signle 商店, 是可以在商店之间进行通信????因为我想让我的 HTML 像
<div id="Name "></div>
<div id="Age "></div>
<div id="Form "></div>
instead of one <div id="content"></div>
var App = React.createClass({
render() {
return (
<div>
<Name />
<Age />
<Form />
</div>
)
}
});
render(
<div>
<Provider store={store} >
<App />
</Provider>
</div>,
document.getElementById('content')
);
解决方案
不可以。开箱即用的 Redux 不提供在多个商店之间进行通信的解决方案。商店之间的通信是 Redux 的前身Flux中看到的一种模式
使用 Redux 的多个商店只会使管理变得更加困难。所以你已经被警告了:)
然而,让它工作的一个 hacky 方法是设置另一个全局存储,它对一个存储中的更改做出反应并通知另一个存储。有关更多详细信息,请查看我可以或应该创建多个商店吗?我可以直接导入我的商店,并自己在组件中使用它吗?它推荐一个 store 并组合多个 reducer。
最初的 Flux 模式描述了在一个应用程序中有多个“商店”,每个商店都保存着不同区域的域数据。这可能会引入一些问题,例如需要让一个商店“等待”另一家商店进行更新。这在 Redux 中不是必需的,因为数据域之间的分离已经通过将单个 reducer 拆分为更小的 reducer 来实现。
尽管您最初认为多个商店可以解决问题,但请考虑以下内容(来自文档)
但是,创建新商店不应该是您的第一直觉,尤其是如果您来自 Flux 背景。先尝试reducer组合,如果它不能解决你的问题,只使用多个商店。
如果您有多个 React 根,您仍然可以在 ReactDOM.render 中将相同的存储传递给它们中的每一个
render(
<div>
<Provider store={store} >
<App1 />
</Provider>
</div>,
document.getElementById('name')
);
render(
<div>
<Provider store={store} >
<App2 />
</Provider>
</div>,
document.getElementById('age')
);
render(
<div>
<Provider store={store} >
<App3 />
</Provider>
</div>,
document.getElementById('form')
);
<div id="name"></div>
和各<div id="age"></div>
一个<div id="form"></div>
。
这是可能的,因为 Redux 只管理状态,而不关心 React 组件树结构或你实际拥有的 React 树。它只是将状态的变化通知给所有订阅它的人。
推荐阅读
- javascript - JS Fetch 只接受 OPTIONS 请求并将其打印出来
- sql - 使用连接转换内联查询
- php - laravel artisan 工具生成mvc结构
- java - 如何预填充我的 Room 数据库?
- python - Django - python中'super'关键字的用途是什么?
- php - FosUserBundle:找不到与“AppBundle\Entity\User”类实体关联的对象管理器
- html - 角度 6 的 SVG 超链接问题
- c++ - 创建指向文件状态的指针并读入
- android - Android 异步任务在后台的进度
- laravel - 如何实现这个复杂的查询?(当用户点击“下载证书”时获取证书内容)