如何创建模型的新实例以及 redux-orm 中的关系?
How to create a new instance of a model along with relations in redux-orm?
使用redux-orm时,如何在创建模型实例时添加相关数据?
例如给定以下两个模型:
// User
import {fk, many, Model} from 'redux-orm';
export default class User extends Model {
static modelName = 'User';
static fields = {
pets: many('Pet', 'pets'),
};
}
// Pet
import {fk, many, Model} from 'redux-orm';
export default class Pet extends Model {
static modelName = 'Pet';
static fields = {
user: fk('User', 'pets'),
};
}
我在宠物模型中创建的减速器看起来像:
case 'PET/CREATE':
const newPet = Pet.create(action.payload);
newPet.user.add(action.parentId); // parentId is the user id
break;
然而,这会导致错误,因为 newPet.user 未定义。我也试过 withRefs
case 'PET/CREATE':
const newPet = Pet.create(action.payload).withRefs;
newPet.user.add(action.parentId);
break;
我也试过重新查找id:
case 'PET/CREATE':
const newPet = Pet.create(action.payload);
// console.log(newPet.id); // correctly outputs id
Pet.withId(newPet.id).user.add(action.parentId);
break;
编辑
发现我可以做到
const newPet = Pet.create({ ...action.payload, user: action.parentId });
但不肯定这是正确的方法,如果它确实正确链接,所以暂时留下这个问题。
"Manually" 为关系字段传入相关 ID 值是一种方法。另一种是创建第一个模型,然后在创建期间或之后将第一个模型实例传递给第二个模型实例:
const fred = User.create({name : "Fred"});
// Pass during creation
const pet = Pet.create({name : "Spot", user : fred});
// Or after creation
const pet = Pet.create({name : "Spot"});
pet.user = fred;
// Then ask Redux-ORM to apply queued updates and return the updated data
return session.reduce();
编辑
更新:作为 a series on "Practical Redux" 的前两部分,我在 Redux-ORM 上发表了几篇文章,讨论了我根据自己的 Redux 经验开发的技术。
使用redux-orm时,如何在创建模型实例时添加相关数据?
例如给定以下两个模型:
// User
import {fk, many, Model} from 'redux-orm';
export default class User extends Model {
static modelName = 'User';
static fields = {
pets: many('Pet', 'pets'),
};
}
// Pet
import {fk, many, Model} from 'redux-orm';
export default class Pet extends Model {
static modelName = 'Pet';
static fields = {
user: fk('User', 'pets'),
};
}
我在宠物模型中创建的减速器看起来像:
case 'PET/CREATE':
const newPet = Pet.create(action.payload);
newPet.user.add(action.parentId); // parentId is the user id
break;
然而,这会导致错误,因为 newPet.user 未定义。我也试过 withRefs
case 'PET/CREATE':
const newPet = Pet.create(action.payload).withRefs;
newPet.user.add(action.parentId);
break;
我也试过重新查找id:
case 'PET/CREATE':
const newPet = Pet.create(action.payload);
// console.log(newPet.id); // correctly outputs id
Pet.withId(newPet.id).user.add(action.parentId);
break;
编辑
发现我可以做到
const newPet = Pet.create({ ...action.payload, user: action.parentId });
但不肯定这是正确的方法,如果它确实正确链接,所以暂时留下这个问题。
"Manually" 为关系字段传入相关 ID 值是一种方法。另一种是创建第一个模型,然后在创建期间或之后将第一个模型实例传递给第二个模型实例:
const fred = User.create({name : "Fred"});
// Pass during creation
const pet = Pet.create({name : "Spot", user : fred});
// Or after creation
const pet = Pet.create({name : "Spot"});
pet.user = fred;
// Then ask Redux-ORM to apply queued updates and return the updated data
return session.reduce();
编辑
更新:作为 a series on "Practical Redux" 的前两部分,我在 Redux-ORM 上发表了几篇文章,讨论了我根据自己的 Redux 经验开发的技术。