dvajs - 获取同步的最佳实践
问题描述
我试图获得User
与Projects
. 这是我的models/user.js
*fetchUser({ payload, callback }, { call, put }) {
const user = yield call(queryUser, payload);
yield put({
type: 'setCurrentUser',
payload: user,
});
if (callback) callback();
},
最佳做法是什么?我应该在哪里调用该函数queryProjects
?也许在这条线以下?
const user = yield call(queryUser, payload);
const projects = yield call(queryProjects, user); // new api call
解决方案
第一种方法
制作两个模型,users
&projects
然后你可以这样做
*fetchUser({ payload, callback }, { call, put }) {
const user = yield call(queryUser, payload);
yield put({
type: 'setCurrentUser',
payload: user,
});
yield put({type: 'projects/fetchByUserId', payload: user.id});
},
Inside your `projects` model.
*fetchByUserId({payload){
// do ajax call
}
获得项目数据后,您可以使用用户 ID 过滤项目数组(考虑到您的项目有类似的内容project.user_id
)并将它们显示到应用程序中。
第二种方法
您可以让后端服务器在用户对象中为用户发送项目列表。
{
id: 1,
username: "foo",
projects: [
{id: 1},
{id: 2}
{id: 3}
]
}
我希望这是有道理的。
推荐阅读
- c# - 如何根据发布配置文件设置生成 Azure 函数名称?
- visual-studio - C# 项目未加载 - 错误:元素下的元素 <#text>
- windows - 如何使用 GNU MCU Eclipse 设置 $(shell)
- git - 克隆存储库和签出分支
- powershell - 如何使用 powershell 检测 NetOps Security Server 是否停止或运行?
- junit - 运行 Test Runner 文件后得到 0 个场景 0 个步骤
- java - 将带有自定义时区的 java.util.Date 转换为 UTC
- html - 如何使按钮的背景适合两列布局中的文本
- aws-api-gateway - CloudFront -> S3 用于 ECS 中具有多个动态后端的静态或 API 网关
- java - 为什么将设备语言更改为 RTL 语言时片段/活动布局看起来很糟糕?