Разница между «Сигналами» (js-сигналы) и «Наблюдаемыми» (mobx, mobx-реагировать)? - PullRequest
0 голосов
/ 14 мая 2018

Могут ли они работать вместе для идеального управления состояниями и двунаправленной привязки данных?

Mobx реализует наблюдаемый шаблон в javascript. Используя mobx и mobx-реагировать, люди могут ссылаться на наблюдаемые значения mobx в реакции и назначать им автозапуск, реакцию и вычисленные процедуры. Каждый раз, когда наблюдаемая меняет свои отношения ссылок, автозапуск, реакцию и запускаемые компьютерные процедуры.

Это действительно полезно, когда вы разрабатывали приложение с богатым контентом, скажем, редактор.

Хотя js-сигналы работают по-разному, сигнал может регистрировать обратные вызовы и их приоритет. Когда компонент изменяется, у программиста есть выбор отправить сигнал, чтобы запустить все связанные обратные вызовы (как события)

Какой шаблон лучше, они могли бы работать вместе плавно?

Фон

Я работаю над редактором, который интенсивно использует сигналы. Я также предпочитаю использовать наблюдаемые шаблоны для управления состояниями редактора. Мои личные чувства, когда наблюдаемое растет (как 200 глобальных переменных), становится трудно поддерживать.

Я ценю ваши мысли. Разработчики, которым удалось использовать эти методы, приветствуются.

1 Ответ

0 голосов
/ 14 мая 2018

js-signal - это просто библиотека отправителя событий, а mobx - это просто библиотека состояния / наблюдателя.

Вы можете просто запускать и обрабатывать события.до тех пор, пока обработчик переносит изменения состояния mobx в mobx.action.изменения в состоянии обрабатываются правильно, а компоненты реакции корректно обновляются / события наблюдателя запускаются правильно:

class Store {
  @mobx.observable name = "test"
}
var store = new Store();
//custom object that dispatch a `started` signal
var myObject = {
  started : new signals.Signal()
};
function onStarted(name){
  mobx.runInAction(() => {
    store.name = name;
  });
}
myObject.started.add(onStarted); //add listener

mobx.observe(store,"name",change=> {
  myObject.started.dispatch(change.name+'x'); //woops now we have an infinite loop!
});
myObject.started.dispatch('foo'); //dispatch signal passing custom parameters
// myObject.started.remove(onStarted); //remove a single listener
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...