Нереактивное обновление для оптимистичного пользовательского интерфейса в пабе / сабе Meteor - PullRequest
0 голосов
/ 11 января 2019

Я использую withTracker в коллекции списков пользователей. Пользователь имеет возможность изменить порядок списков через пользовательский интерфейс, который обновляет определенный элемент в коллекции с помощью метеорного метода. Это затем вызывает withTracked для запуска с новыми данными, вызывая повторную визуализацию в случае, когда пользовательский интерфейс уже показывает правильное состояние. Можно ли заставить withTracker не срабатывать при определенных обновлениях? Мне интересно, есть ли простое решение без создания отдельных коллекций для хранения данных заказа

// Server
Meteor.publish('lists', function (userId) {
  return Lists.find({ userId: Meteor.userId() });
});

...


Meteor.methods({
  "lists.setorder"({ listId, order}) {
     return Lists.update(listId, { $set: { order } })
  }
})
// Client
...

export default withTracker(props => {
    const listsHandle = Meteor.subscribe("lists");
    const lists = Lists.find({}).fetch();
    return { 
       ready: listsHandle.ready(),  
       lists 
    }
})(ListView)

...

// After the lists are re-ordered in the UI I call this to update the state in the backend:
Meteor.call("lists.setorder", ....

1 Ответ

0 голосов
/ 12 января 2019

Если вы хотите предотвратить обновление определенного поля, вы можете исключить его из запроса:

const lists = Lists.find({},{fields: {order: 0}}).fetch();

Это может победить цель, потому что вам, вероятно, нужно заполнить поле order в вашем пользовательском интерфейсе.

Может быть, вам просто нужно согласиться с тем, что обновление произойдет? Если вы используете React, он должен обнаружить, что элементы DOM не изменились, и все равно избегать обновления пользовательского интерфейса

...