Някога беше направено предложение „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 и дори ако вече е супер стабилна и напълно покрита, ако смятате, че нещо трябва окончателно да се промени, това е подходящият момент да ми помогнете да направя това супер полезно за всички , Благодаря ти!