Поток: компоненты высшего порядка для настройки слушателей магазина

После этой статьи Mixins являются мертвыми. Да здравствует композиция, я настроил компонент Pet, прислушивающийся к питомцу, и владелец сохраняет пользовательский компонент более высокого порядка. Но как можно передать owner_id из ресурса питомца в connectToStores? Это просто тот случай, когда миксин лучше?

Pet = connectToStores(Pet, [PetStore, OwnerStore], (props) => {
  return {
    pet   : PetStore.getOne(props.id),
    owner : OwnerStore.getOne(ownerId), // this should come from pet.owner_id                                        
  };
}); 

1 ответ

Решение

Является PetStore.getOne синхронное? Просто присвойте результат переменной.

Pet = connectToStores(Pet, [PetStore, OwnerStore], (props) => {
  var pet = PetStore.getOne(props.id);

  return {
    pet   : pet,
    owner : OwnerStore.getOne(pet.owner_id),    
  };
});

Если это не синхронно, вашему магазину нужно будет отправить событие change, чтобы вызвать повторную визуализацию компонента, когда питомец станет доступен. Компонент также должен как-то обрабатывать животное, которое недоступно.

Pet = connectToStores(Pet, [PetStore, OwnerStore], (props) => {
  var pet, loaded, owner;

  pet = PetStore.getOne(props.id);
  if (pet) {
    loaded = true;
    owner = OwnerStore.getOne(pet.owner_id);
  } else {
    loaded = false;
    owner = null;
  }

  return {
    pet    : pet,
    owner  : owner,
    loaded : loaded
  };
});
Другие вопросы по тегам