[{"data":1,"prerenderedAt":301},["ShallowReactive",2],{"navigation":3,"-concepts-notifications":65,"-concepts-notifications-surround":298},[4,15,29,47],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Omni Async","\u002Fguide","1.guide\u002F1.index",[9,11],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-book-open",{"title":12,"path":13,"stem":14,"icon":10},"Quick start","\u002Fguide\u002Fquick-start","1.guide\u002F2.quick-start",{"title":16,"path":17,"stem":18,"children":19},"Async state","\u002Fconcepts","2.concepts\u002F1.index",[20,21,25],{"title":16,"path":17,"stem":18},{"title":22,"path":23,"stem":24},"Concurrency and cancellation","\u002Fconcepts\u002Fconcurrency-and-cancellation","2.concepts\u002F2.concurrency-and-cancellation",{"title":26,"path":27,"stem":28},"Notifications and equality","\u002Fconcepts\u002Fnotifications","2.concepts\u002F3.notifications",{"title":30,"path":31,"stem":32,"children":33},"Framework adapters","\u002Fframeworks","3.frameworks\u002F1.index",[34,35,39,43],{"title":30,"path":31,"stem":32},{"title":36,"path":37,"stem":38},"React","\u002Fframeworks\u002Freact","3.frameworks\u002F2.react",{"title":40,"path":41,"stem":42},"Vue","\u002Fframeworks\u002Fvue","3.frameworks\u002F3.vue",{"title":44,"path":45,"stem":46},"Svelte","\u002Fframeworks\u002Fsvelte","3.frameworks\u002F4.svelte",{"title":48,"path":49,"stem":50,"children":51},"Core API","\u002Fapi","4.api\u002F1.index",[52,53,57,61],{"title":48,"path":49,"stem":50},{"title":54,"path":55,"stem":56},"React API","\u002Fapi\u002Freact","4.api\u002F2.react",{"title":58,"path":59,"stem":60},"Vue API","\u002Fapi\u002Fvue","4.api\u002F3.vue",{"title":62,"path":63,"stem":64},"Svelte API","\u002Fapi\u002Fsvelte","4.api\u002F4.svelte",{"id":66,"title":26,"body":67,"description":80,"extension":293,"meta":294,"navigation":295,"path":27,"seo":296,"stem":28,"__hash__":297},"content\u002F2.concepts\u002F3.notifications.md",{"type":68,"value":69,"toc":291},"minimark",[70,74,141,148,266,277,287],[71,72,73],"p",{},"Subscribers run only when the operation accepts a new snapshot. The default comparison checks every public state field:",[75,76,81],"pre",{"className":77,"code":78,"language":79,"meta":80,"style":80},"language-ts shiki shiki-themes github-light github-dark github-dark","previous.status === next.status &&\n  Object.is(previous.data, next.data) &&\n  Object.is(previous.error, next.error) &&\n  previous.isLoading === next.isLoading;\n","ts","",[82,83,84,103,118,130],"code",{"__ignoreMap":80},[85,86,89,93,97,100],"span",{"class":87,"line":88},"line",1,[85,90,92],{"class":91},"slsVL","previous.status ",[85,94,96],{"class":95},"so5gQ","===",[85,98,99],{"class":91}," next.status ",[85,101,102],{"class":95},"&&\n",[85,104,106,109,113,116],{"class":87,"line":105},2,[85,107,108],{"class":91},"  Object.",[85,110,112],{"class":111},"shcOC","is",[85,114,115],{"class":91},"(previous.data, next.data) ",[85,117,102],{"class":95},[85,119,121,123,125,128],{"class":87,"line":120},3,[85,122,108],{"class":91},[85,124,112],{"class":111},[85,126,127],{"class":91},"(previous.error, next.error) ",[85,129,102],{"class":95},[85,131,133,136,138],{"class":87,"line":132},4,[85,134,135],{"class":91},"  previous.isLoading ",[85,137,96],{"class":95},[85,139,140],{"class":91}," next.isLoading;\n",[71,142,143,144,147],{},"Provide ",[82,145,146],{},"isEqual"," to define what counts as a meaningful update:",[75,149,151],{"className":77,"code":150,"language":79,"meta":80,"style":80},"const operation = createAsync(loadUser, {\n  isEqual(previous, next) {\n    return (\n      previous.status === next.status &&\n      previous.data?.id === next.data?.id &&\n      previous.error === next.error &&\n      previous.isLoading === next.isLoading\n    );\n  },\n});\n",[82,152,153,171,192,200,211,224,237,248,254,260],{"__ignoreMap":80},[85,154,155,158,162,165,168],{"class":87,"line":88},[85,156,157],{"class":95},"const",[85,159,161],{"class":160},"suiK_"," operation",[85,163,164],{"class":95}," =",[85,166,167],{"class":111}," createAsync",[85,169,170],{"class":91},"(loadUser, {\n",[85,172,173,176,179,183,186,189],{"class":87,"line":105},[85,174,175],{"class":111},"  isEqual",[85,177,178],{"class":91},"(",[85,180,182],{"class":181},"sQHwn","previous",[85,184,185],{"class":91},", ",[85,187,188],{"class":181},"next",[85,190,191],{"class":91},") {\n",[85,193,194,197],{"class":87,"line":120},[85,195,196],{"class":95},"    return",[85,198,199],{"class":91}," (\n",[85,201,202,205,207,209],{"class":87,"line":132},[85,203,204],{"class":91},"      previous.status ",[85,206,96],{"class":95},[85,208,99],{"class":91},[85,210,102],{"class":95},[85,212,214,217,219,222],{"class":87,"line":213},5,[85,215,216],{"class":91},"      previous.data?.id ",[85,218,96],{"class":95},[85,220,221],{"class":91}," next.data?.id ",[85,223,102],{"class":95},[85,225,227,230,232,235],{"class":87,"line":226},6,[85,228,229],{"class":91},"      previous.error ",[85,231,96],{"class":95},[85,233,234],{"class":91}," next.error ",[85,236,102],{"class":95},[85,238,240,243,245],{"class":87,"line":239},7,[85,241,242],{"class":91},"      previous.isLoading ",[85,244,96],{"class":95},[85,246,247],{"class":91}," next.isLoading\n",[85,249,251],{"class":87,"line":250},8,[85,252,253],{"class":91},"    );\n",[85,255,257],{"class":87,"line":256},9,[85,258,259],{"class":91},"  },\n",[85,261,263],{"class":87,"line":262},10,[85,264,265],{"class":91},"});\n",[71,267,268,269,272,273,276],{},"Return ",[82,270,271],{},"true"," to keep the current snapshot and skip subscriber notifications. Return ",[82,274,275],{},"false"," to publish the next snapshot.",[278,279,280],"warning",{},[71,281,282,283,286],{},"An equality function that ignores ",[82,284,285],{},"error",", loading, or status changes can intentionally hide those updates from framework consumers. Include every field your UI observes.",[288,289,290],"style",{},"html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}",{"title":80,"searchDepth":105,"depth":105,"links":292},[],"md",{},{},{"title":26,"description":80},"5asX0M5UKjlOiKkD6TV7x4Lh6zizYCTj1iuMq_k36YI",[299,300],{"title":22,"path":23,"stem":24,"description":80,"children":-1},{"title":30,"path":31,"stem":32,"description":80,"children":-1},1786006625846]