javascript - 是否建议每个页面都有一个mobx Store?
问题描述
我正在构建一个单页应用程序,前端使用 Reactjs 和 MobX(端口 3000),后端使用 Nodejs 和 Express(API,端口 4000)。我对 MobX 和 Reactjs 都是新手,我正在尝试建立一个结构良好的项目。我的问题是:每个视图都有一个商店可以吗?
例如,我有一个 UserStore,它存储 Session 信息并负责平台内用户的登录和注销。但是,登录后,我想将用户重定向到仪表板页面。此仪表板页面必须检索有关用户的信息,但它还必须联系 API 并检索一些数据(即 Some Todos)。我会这样做:
这是重定向到仪表板的登录功能:
*UserStore.js*
[...]
import navigationStore from './NavigationStore';
[...]
login = async (user) => {
try {
const res = await axios.post('/session/login', {
username: user.username,
password: user.password
});
this.saveUser(res.data);
navigationStore.push('/dashboard');
} catch (error) {
[...]
}
}
然后,我创建了一个 DashboardStore.js,它具有以下代码:
*DashboardStore.js*
[... imports and initializations ...]
class Store {
@observable todos = null
constructor() {
this.getDashboard();
}
@action('Load dashboard') getDashboard = async () => {
const res = await axios.get('/api/dashboard/', {});
this.todos = res.todos
}
}
const DashboardStore = new Store();
export default DashboardStore;
但这意味着我最终会为 Todos 页面创建另一个 Store,并为我需要的任何页面创建另一个 Store。在 NodeJs 中,您可以为每个类创建一个控制器,这并不奇怪。但是,我不确定它在 MobX 上是如何工作的。
解决方案
这取决于您的应用程序的复杂性。我不会为每个视图或关注点创建一个商店,但您可以创建两个,就像 MobX 文档推荐的那样:https ://mobx.js.org/best/store.html 。
我现在正在做一个更大的项目,我们从一家商店开始。显然,随着我们不断添加功能,它增长了很多,所以我认为我们可能会在某个时候拆分它以降低复杂性。
推荐阅读
- azure - 如何通过 powershell 脚本或任何其他自动化方式在集成帐户中上传流动文件?
- ssis - SSIS 包将在用 vb 编写的脚本任务中的断点处停止,但在 c# 中不对应
- node.js - 如何使用从 SPA 获得的 azure 广告访问令牌来保护后端 api?
- php - 在当前数组中插入不同的数组值作为键?
- html - 如何阻止视频源的纵横比改变(WebRTC)
- powershell - 返回 O365 团队会议组织者
- command-line - 如何通过命令行启动“Windows Terminal”?
- python-3.x - 如何通过 beautifulSoup 获取类属性?
- wso2 - 来自 wso2 APIM 的“TypeError: failed to fetch”
- javascript - Gatsby createPage 操作