Как создать новый экземпляр модели вместе с отношениями в 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;
Я также попытался повторно найти идентификатор:
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 });
Но не уверен, что это правильный подход, и если он действительно правильно связывает, поэтому оставим вопрос открытым пока.
1 ответ
"Вручную", передав значение связанного идентификатора для поля отношения, является одним из способов сделать это. Другой способ - создать первую модель, а затем передать первый экземпляр модели второму экземпляру модели во время или после создания:
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();
редактировать
Обновление: я опубликовал пару постов на Redux-ORM в качестве первых двух частей серии "Практическое Redux", где обсуждаются методы, которые я разработал на основе своего собственного опыта с Redux.