Някога беше направено предложение „Object.observe“, за да ни даде възможност да наблюдаваме общи свойства на обект: добавени, премахнати или променени.

Те смятат тази функция за „революция“, дори ако е ограничена до едно известие за промени от най-високо ниво, защото най-накрая можехме да реагираме на промените.

В наши дни разполагаме с states и сродни методи като setState(changes), за да реагираме на тези промени по прагматичен начин: Object.observe вече няма магия!

Ами ако ти кажа...

… че всички съвременни браузъри и NodeJS могат да използват проксита за „автоматично“ прихващане на всяка промяна, на всякаква дълбочина, за всякакъв вид сериализираща се структура на данни като JSON?

Запознайте се с „Introspected“

С вече 100% покритие на кода и различни тествани случаи на употреба, включително тази прекрасна интеграция с hyperHTML и класове, Introspected е в състояние да прихваща и уведомява всяко промяна, която може да се случи на всеки път, на всякаква дълбочина, в общ обект или масив.

Всяко известие ще бъде незабавно изпратено и е възможно да се прави разлика между оригиналните данни и шпионираните при всяка промяна чрез Introspected.

Обмислете следните изходни данни, наблюдавани чрез Introspected и уведомявани при всяка промяна.

След като го направите и можете да тествате директно на тестовата страница на живо всичко, което е показано в тази публикация, можете да промените всякакъв вид данни и да ги видите добре регистрирани в конзолата.

Резултатът ще изглежда така:

Какво има зад червеното кадифено перде

Интроспектираният обект е безкраен прокси, който може да бъде зададен по всяко време във всяко свойство на всякаква дълбочина.

Не бихте проверили за свойство като obj.prop.b, защото то винаги е вярно, бихте 'b' in obj.prop вместо това.

Можете същоIntrospected.pathValue(obj,['prop','b']);да извлечете стойност и/или да проверите дали общият път не е undefined.

Всички прокси сървъри са обвиващи речници и промените се уведомяват само ако зададените стойности са различни от предишните.

Можете Introspected.observe(obj, callbaclk)многократно да имате различни известия, ако това obj вече е Introspected, и това е почти всичко, нищо друго за запомняне 🎉

Какви са случаите на употреба?

  • общи състояния, наблюдавани по начин, по който нищо не може да бъде пропуснато
  • моделни данни към полета на формуляри и обратно, където всяко поле може да има моделен път, свързан с него
  • асинхронно хранилище с постепенни актуализации, използвайки същото обратно извикване на diff, което показах по-рано, можем да актуализираме, добавяме или премахваме полета и стойности от всякакъв вид релационна, а не база данни
  • инструменти, където промяна в обект може да задейства компилация, актуализации на потребителския интерфейс, известия и други

Ако имате други полезни случаи, моля, споделете и ми кажете какво мислите за този подход.

Моля, обърнете внимание: версията на изданието е 0.1.7 и дори ако вече е супер стабилна и напълно покрита, ако смятате, че нещо трябва окончателно да се промени, това е подходящият момент да ми помогнете да направя това супер полезно за всички , Благодаря ти!