Meteor createContainer повторно подписывается на данные

Это моя оболочка createContainer:

export default createContainer(({params}) => {
  const currentUser = Meteor.user();

  let itemsCount = 10;
  const subs = Meteor.subscribe('items', itemsCount);
  const items = Items.find({}, {sort: {country: 1, lastUpdateCheck: -1}}).fetch();

  return {
    items,
    currentUser,
  };
}, MyComponent);

Я хотел бы разместить кнопку Загрузить еще где-нибудь в компоненте MyComponent, а при нажатии кнопки увеличивать itemsCount в createContainer. strong>, чтобы подписаться на получение дополнительных данных. Можно ли вообще изменить переменную в createContainer? Или какие-то другие способы?


person torayeff    schedule 23.08.2016    source источник


Ответы (1)


Один из способов сделать это — использовать ReactiveVar для хранения itemsCount, а затем передайте этот ReactiveVar в свой MyComponent в качестве опоры. Когда нажата кнопка «Загрузить больше», вы можете изменить значение itemsCount, что приведет к повторному запуску вашего кода createContainer. Быстрый пример:

const itemsCount = new ReactiveVar(10);

export default createContainer(({params}) => {
  const currentUser = Meteor.user();
  const subs = Meteor.subscribe('items', itemsCount.get());
  const items = Items.find(
    {}, 
    {sort: {country: 1, lastUpdateCheck: -1}}
  ).fetch();

  return {
    items,
    currentUser,
    itemsCount,
  };
}, MyComponent);

то в вашем MyComponent вы вызовете this.props.itemsCount.set(X) где-нибудь после нажатия кнопки загрузки.

person hwillson    schedule 23.08.2016
comment
Великолепно! Спасибо :-) - person James M. Lay; 11.04.2017