<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://dataclient.io/pt-BR/blog</id>
    <title>Data Client Blog</title>
    <updated>2026-10-03T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://dataclient.io/pt-BR/blog"/>
    <subtitle>Data Client Blog</subtitle>
    <entry>
        <title type="html"><![CDATA[v0.19: Coding Agents, Batch Controller.set(), Faster TypeScript]]></title>
        <id>https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set</id>
        <link href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set"/>
        <updated>2026-10-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Set up Data Client with one prompt in Claude Code, Cursor or Codex, write many entities in one store update, and type-check endpoints about 2x faster]]></summary>
        <content type="html"><![CDATA[
<p>v0.19 makes coding agents a first-class way to build with Data Client: one prompt sets up your app, and your agent
follows skills that ship with the packages you installed. It also lets a <a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers">Manager</a> write a
whole batch of streamed rows in one store update, type-checks endpoint code about 2x faster, and fixes a round of
TypeScript and Vue issues.</p>
<p><strong>Coding Agents:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#agent-setup">One-prompt setup</a> - Add the <code>data-client</code> plugin to Claude Code, Cursor or Codex and ask it to set up Data Client; it installs the packages, adds the provider and links the skills your app needs</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#npm-skills">Skills ship in the packages</a> - <code>npx --no data-client-skills</code> links the skills your installed <code>@data-client/*</code> packages carry, so your agent follows the version you have instead of an older release</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#agents-md">Agents keep using Data Client</a> - Setup adds a note to <code>AGENTS.md</code>, and each skill names the everyday tasks it covers, so later sessions reach for Data Client instead of <code>fetch</code> in <code>useEffect</code></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#agent-debugging">Debug the running app</a> - In development, <code>globalThis.__DC__</code> gives your agent the store's <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller">Controller</a> and recent actions from Cursor's browser, Chrome DevTools MCP, Playwright MCP or Claude in Chrome</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#vue-skills">Vue skills</a>, <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#llms-txt">llms.txt</a>, and skills <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#generated-references">generated from these docs</a></li>
</ul>
<p><strong>New APIs:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#batch-set">Controller.set() with Array schemas</a> - Write many entities in one store update with <code>ctrl.set([Entity], rows)</code>, <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#batch-set-performance">up to 95x faster</a> than one <code>set()</code> per row</li>
</ul>
<p><strong>Performance:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#faster-types">Faster TypeScript</a> - Editors and <code>tsc</code> check <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint">RestEndpoint</a> and <a class="" href="https://dataclient.io/pt-BR/rest/api/resource">resource()</a> code <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#faster-types-results">about 2x faster with 40% less memory</a>, catching every error they caught before</li>
</ul>
<p><strong>Other Improvements:</strong></p>
<ul>
<li class="">Fix TypeScript 7 module resolution for package <code>exports</code>; imports now resolve to declaration files (<a href="https://github.com/reactive/data-client/pull/4019" target="_blank" rel="noopener noreferrer" class="">#4019</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/docs/api/renderDataHook">renderDataHook()</a> runs provider mount effects when the first render suspends (<a href="https://github.com/reactive/data-client/pull/4099" target="_blank" rel="noopener noreferrer" class="">#4099</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typed-set">Controller.set() values are typed by the schema</a>, so <code>ctrl.set(new schema.All(Todo), 42)</code> is a TypeScript error (<a href="https://github.com/reactive/data-client/pull/4133" target="_blank" rel="noopener noreferrer" class="">#4133</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#set-invalidate">Controller.set() deletes one entity with an Invalidate schema</a> without the one-row batch workaround (<a href="https://github.com/reactive/data-client/pull/4230" target="_blank" rel="noopener noreferrer" class="">#4230</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#extend-process-params">process() gets typed params</a> in <code>new RestEndpoint()</code>, <code>.extend()</code> and <code>resource().extend()</code>, so a wrong path parameter is a TypeScript error instead of <code>undefined</code> at runtime (<a href="https://github.com/reactive/data-client/pull/4183" target="_blank" rel="noopener noreferrer" class="">#4183</a>, <a href="https://github.com/reactive/data-client/pull/4184" target="_blank" rel="noopener noreferrer" class="">#4184</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typed-optimistic-response">getOptimisticResponse() returns are typed by the schema</a>, so a wrong field type is a TypeScript error instead of a flash of bad data (<a href="https://github.com/reactive/data-client/pull/4198" target="_blank" rel="noopener noreferrer" class="">#4198</a>)</li>
<li class="">Vue <a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> and <a class="" href="https://dataclient.io/pt-BR/vue/api/useLive">useLive()</a> keep the previous data while new arguments load, instead of returning <code>undefined</code> (<a href="https://github.com/reactive/data-client/pull/4131" target="_blank" rel="noopener noreferrer" class="">#4131</a>)</li>
<li class="">Vue <a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> and <a class="" href="https://dataclient.io/pt-BR/vue/api/useLive">useLive()</a> send fetch errors after arguments change to <code>onErrorCaptured()</code> instead of an unhandled promise rejection (<a href="https://github.com/reactive/data-client/pull/4135" target="_blank" rel="noopener noreferrer" class="">#4135</a>)</li>
<li class="">Vue <a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a>, <a class="" href="https://dataclient.io/pt-BR/vue/api/useDLE">useDLE()</a> and <a class="" href="https://dataclient.io/pt-BR/vue/api/useFetch">useFetch()</a> no longer refetch stale data on every store update, so a <code>controller.set()</code> is not overwritten (<a href="https://github.com/reactive/data-client/pull/4134" target="_blank" rel="noopener noreferrer" class="">#4134</a>)</li>
<li class="">Vue <a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#vue-stale-while-revalidate">shows stale data on mount</a> and refetches in the background, like React, instead of showing the <code>&lt;Suspense&gt;</code> fallback until the refetch finishes (<a href="https://github.com/reactive/data-client/pull/4169" target="_blank" rel="noopener noreferrer" class="">#4169</a>)</li>
<li class="">Vue <a class="" href="https://dataclient.io/pt-BR/vue/api/useDLE">useDLE()</a> and <a class="" href="https://dataclient.io/pt-BR/vue/api/useCache">useCache()</a> keep expired <code>invalidIfStale</code> data through unrelated store updates instead of getting stuck loading (<a href="https://github.com/reactive/data-client/pull/4142" target="_blank" rel="noopener noreferrer" class="">#4142</a>)</li>
<li class="">Vue <code>DataClientPlugin</code> installs on Vue versions before 3.5 instead of throwing <code>app.onUnmount is not a function</code> (<a href="https://github.com/reactive/data-client/pull/4146" target="_blank" rel="noopener noreferrer" class="">#4146</a>)</li>
<li class="">Vue <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin#gcPolicy">DataClientPlugin</a> garbage collects by default, matching React's <a class="" href="https://dataclient.io/pt-BR/docs/api/DataProvider">DataProvider</a>, so you no longer need to pass <code>gcPolicy</code>; <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#vue-gc">how it decides what to remove</a> (<a href="https://github.com/reactive/data-client/pull/4148" target="_blank" rel="noopener noreferrer" class="">#4148</a>)</li>
<li class="">Vue composables accept <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#vue-getter-args">getter arguments</a> like <code>() =&gt; ({ id: props.id })</code>; they were typed to allow them but passed the function itself to the endpoint (<a href="https://github.com/reactive/data-client/pull/4115" target="_blank" rel="noopener noreferrer" class="">#4115</a>)</li>
<li class="">Fix <code>Cannot find name 'NoInfer'</code> and <code>export type</code> errors on TypeScript 4.x with <code>skipLibCheck</code> off (<a href="https://github.com/reactive/data-client/pull/4138" target="_blank" rel="noopener noreferrer" class="">#4138</a>)</li>
<li class="">Fix <code>Entity</code>, <code>Endpoint</code>, <code>Union</code> and <code>RestEndpoint</code> type errors on TypeScript 4.0–4.5 with <code>skipLibCheck</code> off (<a href="https://github.com/reactive/data-client/pull/4140" target="_blank" rel="noopener noreferrer" class="">#4140</a>)</li>
<li class="">Fix <code>',' expected</code> errors importing <code>@data-client/react/redux</code>, <code>@data-client/react/nextjs</code> or <code>@data-client/test</code> on TypeScript 4.0–4.4 (<a href="https://github.com/reactive/data-client/pull/4232" target="_blank" rel="noopener noreferrer" class="">#4232</a>)</li>
<li class="">Fix <code>act</code> and <code>renderHook</code> from <code>@data-client/test</code> typed as <code>any</code> on TypeScript 4.0–4.4 (<a href="https://github.com/reactive/data-client/pull/4251" target="_blank" rel="noopener noreferrer" class="">#4251</a>)</li>
<li class="">React Native <a class="" href="https://dataclient.io/pt-BR/docs/api/useSuspense">useSuspense()</a>, <a class="" href="https://dataclient.io/pt-BR/docs/api/useFetch">useFetch()</a> and <a class="" href="https://dataclient.io/pt-BR/docs/api/useDLE">useDLE()</a> refetch on screen focus only when the current data is stale or invalid, instead of refetching fresh data on every refocus (<a href="https://github.com/reactive/data-client/pull/4378" target="_blank" rel="noopener noreferrer" class="">#4378</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/docs/api/renderDataHook">renderDataHook()</a> works with React Native Testing Library 14 and stays synchronous, so <code>renderDataHook()</code> calls need no <code>await</code> (<a href="https://github.com/reactive/data-client/pull/4374" target="_blank" rel="noopener noreferrer" class="">#4374</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/rest/api/Entity">Entity</a> classes can be used where an <code>EntityInterface</code> is expected (<a href="https://github.com/reactive/data-client/pull/4149" target="_blank" rel="noopener noreferrer" class="">#4149</a>); <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#entity-pk-args">prepare <code>pk()</code> overrides</a> for a future release</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/docs/api/useCache">useCache()</a> and <a class="" href="https://dataclient.io/pt-BR/docs/api/useDLE">useDLE()</a> return <code>undefined</code> for a deleted entity whose refetch failed, instead of a truthy <code>Symbol</code> that slipped past <code>if (!data)</code> checks; <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#deleted-entity-undefined">remove any workarounds</a> (<a href="https://github.com/reactive/data-client/pull/4150" target="_blank" rel="noopener noreferrer" class="">#4150</a>)</li>
<li class="">Vue <a class="" href="https://dataclient.io/pt-BR/vue/api/useFetch">useFetch()</a> keeps its data from being garbage collected while mounted, like <a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a>, so a configured <code>gcPolicy</code> no longer evicts prefetched data that components read later (<a href="https://github.com/reactive/data-client/pull/4152" target="_blank" rel="noopener noreferrer" class="">#4152</a>)</li>
<li class="">Apps with <a class="" href="https://dataclient.io/pt-BR/docs/getting-started/debugging">Redux DevTools</a> open no longer stutter in development on large stores or frequent updates; each update <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#devtools-perf">serializes 40-60x faster</a> (<a href="https://github.com/reactive/data-client/pull/4163" target="_blank" rel="noopener noreferrer" class="">#4163</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/rest/api/resource#extend">resource().extend()</a> with an object of endpoint overrides keeps endpoints added earlier with <code>.extend('name', options)</code> in its type, so using them is no longer a TypeScript error (<a href="https://github.com/reactive/data-client/pull/4184" target="_blank" rel="noopener noreferrer" class="">#4184</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#query-collection-push">RestEndpoint.push</a>, <code>unshift</code> and <code>remove</code> accept the Entity's fields as the body when a <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a> or <a class="" href="https://dataclient.io/pt-BR/rest/api/Lazy">Lazy</a> wraps the <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a>, instead of only <code>FormData</code> (<a href="https://github.com/reactive/data-client/pull/4226" target="_blank" rel="noopener noreferrer" class="">#4226</a>)</li>
<li class="">Vue <a class="" href="https://dataclient.io/pt-BR/vue/api/useFetch">useFetch()</a> is typed as the read-only <code>Ref</code> it returns, so <code>promise.resolved</code> (always <code>undefined</code>) is now a TypeScript error; read <code>promise.value.resolved</code> instead (<a href="https://github.com/reactive/data-client/pull/4114" target="_blank" rel="noopener noreferrer" class="">#4114</a>)</li>
<li class="">A <code>Controller</code> subclass passed to <a class="" href="https://dataclient.io/pt-BR/docs/api/DataProvider#Controller">DataProvider</a> or <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin#Controller">DataClientPlugin</a> no longer needs a cast to type-check (<a href="https://github.com/reactive/data-client/pull/4228" target="_blank" rel="noopener noreferrer" class="">#4228</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/docs/guides/redux">prepareStore()</a>'s <code>store</code> can be passed to react-redux's <code>&lt;Provider&gt;</code> without a cast, and has <code>dispatch()</code> in its type (<a href="https://github.com/reactive/data-client/pull/4238" target="_blank" rel="noopener noreferrer" class="">#4238</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#create-formdata">resource().create accepts FormData</a> without a cast, like <code>update</code>, <code>partialUpdate</code> and <code>getList.push</code> (<a href="https://github.com/reactive/data-client/pull/4235" target="_blank" rel="noopener noreferrer" class="">#4235</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#push">RestEndpoint.push</a>, <code>unshift</code> and <code>remove</code> send an array body as JSON, so creating or removing several items at once no longer sends <code>"[object Object]"</code> to your server; <code>resource().create</code> takes an array too (<a href="https://github.com/reactive/data-client/pull/4262" target="_blank" rel="noopener noreferrer" class="">#4262</a>)</li>
<li class="">Polling keeps the schema of endpoints given <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#pollfrequency">pollFrequency</a> with <code>.extend()</code>, so a polled <a class="" href="https://dataclient.io/pt-BR/docs/api/useLive">useLive()</a> list updates right away from mutations and optimistic updates instead of waiting for the next poll (<a href="https://github.com/reactive/data-client/pull/4437" target="_blank" rel="noopener noreferrer" class="">#4437</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/docs/api/DataProvider">DataProvider</a> only warns that it doesn't update during SSR when something fetches while the server renders, instead of on every server render, so pages that load data after mount (like Expo Router's static web output) stay quiet (<a href="https://github.com/reactive/data-client/pull/4449" target="_blank" rel="noopener noreferrer" class="">#4449</a>)</li>
<li class="">Server rendering with React 19 no longer logs "Uncaught suspense" when nothing suspended; React renders and discards fallbacks of large boundaries, and the warning now waits for a fallback that actually shows (<a href="https://github.com/reactive/data-client/pull/4450" target="_blank" rel="noopener noreferrer" class="">#4450</a>)</li>
<li class="">Vue <code>createDataClient()</code> is deprecated, since it's internal to <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin">DataClientPlugin</a>; install the plugin with <code>app.use(DataClientPlugin, options)</code> instead of calling it directly (<a href="https://github.com/reactive/data-client/pull/4193" target="_blank" rel="noopener noreferrer" class="">#4193</a>)</li>
<li class="">Vue <code>renderDataCompose()</code>'s <code>waitForNextUpdate()</code> is deprecated, since it gives up silently after 1 second and lets a test pass while still suspended; <code>await result</code> instead, or <code>await allSettled()</code> after a change, which now also waits for fetches a prop change starts (<a class="" href="https://dataclient.io/pt-BR/vue/guides/unit-testing-composables#renderdatacompose-api">unit testing composables</a>, <a href="https://github.com/reactive/data-client/pull/4221" target="_blank" rel="noopener noreferrer" class="">#4221</a>)</li>
</ul>
<p><strong><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#migration-guide">Breaking Changes:</a></strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typescript-4">TypeScript 4.0 or later is required</a> - the TypeScript 3.x declarations are removed (<a href="https://github.com/reactive/data-client/pull/4151" target="_blank" rel="noopener noreferrer" class="">#4151</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#manager-middleware">Managers must define <code>middleware</code></a> - <code>getMiddleware()</code> is removed (<a href="https://github.com/reactive/data-client/pull/4378" target="_blank" rel="noopener noreferrer" class="">#4378</a>, <a href="https://github.com/reactive/data-client/pull/4382" target="_blank" rel="noopener noreferrer" class="">#4382</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#test-react-0.15">@data-client/test requires @data-client/react 0.15.3 or later</a> (<a href="https://github.com/reactive/data-client/pull/4414" target="_blank" rel="noopener noreferrer" class="">#4414</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#dc-global"><code>globalThis.__DC__</code> replaces <code>__DC_CONTROLLERS__</code></a> in development (<a href="https://github.com/reactive/data-client/pull/4435" target="_blank" rel="noopener noreferrer" class="">#4435</a>)</li>
</ul>
<p><strong><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#future-releases">Get ready for future releases:</a></strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#future-pk-args">Type <code>args</code> as <code>readonly</code> in <code>Entity.pk()</code> overrides</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#future-create-data-client">Use <code>DataClientPlugin</code> instead of Vue <code>createDataClient()</code></a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#future-wait-for-next-update">Replace <code>waitForNextUpdate()</code> in Vue tests</a></li>
</ul>
<!-- -->
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="agents">Coding agents<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#agents" class="hash-link" aria-label="Link direto para Coding agents" title="Link direto para Coding agents" translate="no">​</a></h2>
<p>Coding agents write a lot of Data Client code, and they write it well when they have the current APIs instead of
guessing from older releases they were trained on. v0.19 gets your agent those APIs in one step, keeps them matched
to the version you install, and lets it check the running app.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="agent-setup">Set up with one prompt<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#agent-setup" class="hash-link" aria-label="Link direto para Set up with one prompt" title="Link direto para Set up with one prompt" translate="no">​</a></h3>
<p>Add the <code>data-client</code> plugin to your agent, then ask it to set up Data Client:</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs tabs_mHRD"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV claude_R4UC tabs__item--active">Claude Code</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV cursor_zvAy">Cursor</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV codex_cvY9">Codex</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV other_M39Q">Other agents</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l"><span class="terminalTitle_sx3z"><svg class="terminalIcon_jv7e" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19h8"></path><path d="m4 17 6-6-6-6"></path></svg>Terminal</span></div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">claude plugin marketplace </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> reactive/data-client </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--scope</span><span class="token plain"> project </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--sparse</span><span class="token plain"> .claude-plugin .agents/skills</span><br></div><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">claude plugin </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> data-client@data-client </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--scope</span><span class="token plain"> project</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div><div class="agentPrompt__MJg framed_jzqs"><button type="button" class="clean-btn prompt_J3Oq" aria-describedby="_R_hgjqllq9_"><svg class="spark_sePl" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg><span class="label_iEid">Chat do agente do Claude Code</span><span class="text_e86Q">/data-client:data-client-setup Set up <span class="pkg_Mw_1">@data-client/react</span> and use it for all API data</span><span class="copyIcons_gf7Z" aria-hidden="true"><svg class="copyIcon_GHJa" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><svg class="checkIcon_mm76" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span></button><span role="tooltip" id="_R_hgjqllq9_" class="tip_NYx7 tip_cCYE" aria-live="polite">Copiar o prompt para o Claude Code</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="agentPrompt__MJg framed_jzqs"><button type="button" class="clean-btn prompt_J3Oq" aria-describedby="_R_agjqllq9_"><svg class="spark_sePl" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg><span class="label_iEid">Chat do agente do Cursor</span><span class="text_e86Q">/add-plugin data-client@https://github.com/reactive/data-client</span><span class="copyIcons_gf7Z" aria-hidden="true"><svg class="copyIcon_GHJa" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><svg class="checkIcon_mm76" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span></button><span role="tooltip" id="_R_agjqllq9_" class="tip_NYx7 tip_cCYE" aria-live="polite">Copiar o prompt para o Cursor</span></div><p>Then, in a new chat:</p><div class="agentPrompt__MJg framed_jzqs"><button type="button" class="clean-btn prompt_J3Oq" aria-describedby="_R_qgjqllq9_"><svg class="spark_sePl" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg><span class="label_iEid">Chat do agente do Cursor</span><span class="text_e86Q">/data-client-setup Set up <span class="pkg_Mw_1">@data-client/react</span> and use it for all API data</span><span class="copyIcons_gf7Z" aria-hidden="true"><svg class="copyIcon_GHJa" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><svg class="checkIcon_mm76" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span></button><span role="tooltip" id="_R_qgjqllq9_" class="tip_NYx7 tip_cCYE" aria-live="polite">Copiar o prompt para o Cursor</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l"><span class="terminalTitle_sx3z"><svg class="terminalIcon_jv7e" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19h8"></path><path d="m4 17 6-6-6-6"></path></svg>Terminal</span></div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">codex plugin marketplace </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> reactive/data-client </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--sparse</span><span class="token plain"> .claude-plugin </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--sparse</span><span class="token plain"> .agents/skills</span><br></div><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">codex plugin </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> data-client@data-client</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div><div class="agentPrompt__MJg framed_jzqs"><button type="button" class="clean-btn prompt_J3Oq" aria-describedby="_R_jgjqllq9_"><svg class="spark_sePl" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg><span class="label_iEid">Chat do agente do Codex</span><span class="text_e86Q">$data-client:data-client-setup Set up <span class="pkg_Mw_1">@data-client/react</span> and use it for all API data</span><span class="copyIcons_gf7Z" aria-hidden="true"><svg class="copyIcon_GHJa" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><svg class="checkIcon_mm76" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span></button><span role="tooltip" id="_R_jgjqllq9_" class="tip_NYx7 tip_cCYE" aria-live="polite">Copiar o prompt para o Codex</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="agentPrompt__MJg framed_jzqs"><button type="button" class="clean-btn prompt_J3Oq" aria-describedby="_R_4gjqllq9_"><svg class="spark_sePl" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg><span class="label_iEid">Chat do agente</span><span class="text_e86Q">Use <span class="pkg_Mw_1">@data-client/react</span> para todo o estado do servidor</span><span class="copyIcons_gf7Z" aria-hidden="true"><svg class="copyIcon_GHJa" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><svg class="checkIcon_mm76" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span></button><span role="tooltip" id="_R_4gjqllq9_" class="tip_NYx7 tip_cCYE" aria-live="polite">Copiar o prompt para o seu agente de programação</span></div></div></div></div>
<p>The setup skill detects React or Vue and your API style (REST, GraphQL or custom async functions), installs the
packages, adds the provider, and links the skills those packages ship. For REST it also moves your existing <code>fetch</code> or
axios calls to <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint">endpoints</a> (<a href="https://github.com/reactive/data-client/pull/4153" target="_blank" rel="noopener noreferrer" class="">#4153</a>).
Claude Code installs the plugin for the project, so teammates who open it get the plugin too. The package READMEs
on npm open with the same setup (<a href="https://github.com/reactive/data-client/pull/4454" target="_blank" rel="noopener noreferrer" class="">#4454</a>).</p>
<p>The plugin only sets apps up, so it carries just the setup skill and the <code>data-client</code> skill
<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#agents-md" class="">below</a>. Every other skill comes from your packages, below. Agents without a plugin take the <strong>Other agents</strong>
prompt, which installs the setup skill with the <a href="https://skills.sh/" target="_blank" rel="noopener noreferrer" class="">skills CLI</a> first.
<a href="https://github.com/reactive/data-client/pull/4410" target="_blank" rel="noopener noreferrer" class="">#4410</a>,
<a href="https://github.com/reactive/data-client/pull/4425" target="_blank" rel="noopener noreferrer" class="">#4425</a>,
<a href="https://github.com/reactive/data-client/pull/4427" target="_blank" rel="noopener noreferrer" class="">#4427</a>,
<a href="https://github.com/reactive/data-client/pull/4439" target="_blank" rel="noopener noreferrer" class="">#4439</a>,
<a href="https://github.com/reactive/data-client/pull/4440" target="_blank" rel="noopener noreferrer" class="">#4440</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="npm-skills">Skills ship in the packages<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#npm-skills" class="hash-link" aria-label="Link direto para Skills ship in the packages" title="Link direto para Skills ship in the packages" translate="no">​</a></h3>
<p>Each <code>@data-client/*</code> package now carries the skills for its own APIs, so your agent follows the version you have
installed and gets new guidance with each upgrade. <code>data-client-skills</code> (in <code>@data-client/react</code>, <code>vue</code>, <code>rest</code>,
<code>graphql</code> and <code>endpoint</code>) links them into <code>.agents/skills</code>, with <code>.claude/skills</code> linking to it, where Claude Code,
Cursor and Codex load them as their own skills.</p>
<figure class="figure_HN5N"><figcaption class="caption_pMal">Skills used to be copied from GitHub master; now they come from the packages you installed.</figcaption><div class="grid_iD3H wrap_ES0G"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l"><span class="terminalTitle_sx3z"><svg class="terminalIcon_jv7e" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19h8"></path><path d="m4 17 6-6-6-6"></path></svg>Before</span></div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx skills </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> reactive/data-client </span><span class="token punctuation" style="color:rgb(199, 146, 234)">\</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--skill</span><span class="token plain"> data-client-react </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--skill</span><span class="token plain"> data-client-rest </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--skill</span><span class="token plain"> data-client-schema</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l"><span class="terminalTitle_sx3z"><svg class="terminalIcon_jv7e" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19h8"></path><path d="m4 17 6-6-6-6"></path></svg>After</span></div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--no</span><span class="token plain"> data-client-skills</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div></figure>
<p>Commit the links, and run the command again after adding, removing or upgrading <code>@data-client</code> packages
(<a class="" href="https://dataclient.io/pt-BR/docs/getting-started/agent-skills">Agent Skills</a> has the details). If you installed skills with <code>npx skills add</code>
before, remove those copies first (<code>npx skills remove data-client-react -y</code>); the command keeps folders it didn't
create and says so.
<a href="https://github.com/reactive/data-client/pull/4407" target="_blank" rel="noopener noreferrer" class="">#4407</a>,
<a href="https://github.com/reactive/data-client/pull/4410" target="_blank" rel="noopener noreferrer" class="">#4410</a></p>
<p>Upgrade skills ship in the packages too. <code>data-client-v0.18-migration</code> runs the <a href="https://dataclient.io/pt-BR/assets/files/v0.18-57a9e93e47ddbc37fc4ab436a1aa882b.js" target="_blank" class="">codemod</a>, then
handles what it can't (<a class="" href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#migration-guide">v0.18 migration</a>), and
<code>path-to-regexp-v8-migration</code> rewrites
<a class="" href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#path-to-regexp-v8">path syntax</a> in your endpoints.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="agents-md">Agents keep using Data Client<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#agents-md" class="hash-link" aria-label="Link direto para Agents keep using Data Client" title="Link direto para Agents keep using Data Client" translate="no">​</a></h3>
<p>An agent in a later session doesn't know the setup happened, so it can fall back to <code>fetch</code> in <code>useEffect</code> or
app-wide context. Setup now adds a note to your project's <code>AGENTS.md</code>, which Cursor, Codex and Claude Code read at the
start of every session (setup adds <code>@AGENTS.md</code> to your <code>CLAUDE.md</code> if you have one):</p>
<div class="language-md codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">AGENTS.md</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-md codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">This app manages server state (fetching, caching, mutations and real-time updates) with Reactive Data Client. Use it</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">for all server data, and read the matching </span><span class="token code-snippet code keyword" style="font-style:italic">`data-client-*`</span><span class="token plain"> skill before writing, changing or debugging code that loads</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">or changes data. After adding, removing or upgrading </span><span class="token code-snippet code keyword" style="font-style:italic">`@data-client/*`</span><span class="token plain"> packages, run </span><span class="token code-snippet code keyword" style="font-style:italic">`npx --no data-client-skills`</span><span class="token plain"> and</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">commit the skill links.</span><br></div></code></pre></div></div>
<p>Each skill's description now names the work it covers in everyday terms, like loading and error states, forms, or data
that looks stale on screen, instead of listing hook names, so agents load it for those tasks even when you never
mention Data Client. Adding or changing an endpoint that returns data loads <code>data-client-schema</code>, so the endpoint's responses
are normalized into the shared cache with <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity">Entities</a>. The <code>data-client</code> skill starts any Data Client task and points your
agent at the skill for it.
<a href="https://github.com/reactive/data-client/pull/4408" target="_blank" rel="noopener noreferrer" class="">#4408</a>,
<a href="https://github.com/reactive/data-client/pull/4428" target="_blank" rel="noopener noreferrer" class="">#4428</a>,
<a href="https://github.com/reactive/data-client/pull/4453" target="_blank" rel="noopener noreferrer" class="">#4453</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="agent-debugging">Debug the running app<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#agent-debugging" class="hash-link" aria-label="Link direto para Debug the running app" title="Link direto para Debug the running app" translate="no">​</a></h3>
<p>Ask your agent "why didn't this refetch?" or "what's in the cache right now?" and it can check the running app instead
of guessing from code. In development, <a class="" href="https://dataclient.io/pt-BR/docs/api/DevToolsManager#controllers">DevToolsManager</a> puts the store on
<code>globalThis.__DC__</code>: <code>__DC__.controller</code> is its <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller">Controller</a>, and <code>__DC__.actions</code> its recent
actions, recorded from the moment the app starts, with or without the Redux DevTools extension. Production builds
don't include it.</p>
<div class="language-js codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Browser DevTools console</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-js codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">__DC__</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">getState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">__DC__</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">actions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">slice</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token number" style="color:rgb(247, 140, 108)">10</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>The React and Vue skills read it from any browser tool that runs JavaScript in the page: Cursor's built-in browser,
<a href="https://github.com/ChromeDevTools/chrome-devtools-mcp" target="_blank" rel="noopener noreferrer" class="">Chrome DevTools MCP</a>,
<a href="https://github.com/microsoft/playwright-mcp" target="_blank" rel="noopener noreferrer" class="">Playwright MCP</a> or Claude in Chrome, and match dispatched actions to network requests; see
<a class="" href="https://dataclient.io/pt-BR/docs/getting-started/debugging#debugging-with-agents">debugging with agents</a>. If your own
scripts read <code>__DC_CONTROLLERS__</code>, <a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#dc-global" class="">switch them to <code>__DC__</code></a>.
<a href="https://github.com/reactive/data-client/pull/4435" target="_blank" rel="noopener noreferrer" class="">#4435</a>,
<a href="https://github.com/reactive/data-client/pull/4428" target="_blank" rel="noopener noreferrer" class="">#4428</a>,
<a href="https://github.com/reactive/data-client/pull/4447" target="_blank" rel="noopener noreferrer" class="">#4447</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="vue-skills">Vue skills<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#vue-skills" class="hash-link" aria-label="Link direto para Vue skills" title="Link direto para Vue skills" translate="no">​</a></h3>
<p>Vue projects used to get the React hooks skill, so agents reached for React patterns. The <code>data-client-vue</code> skill
writes <code>DataClientPlugin</code> and composable code and <a class="" href="https://dataclient.io/pt-BR/vue/getting-started/debugging#debugging-with-agents">debugs a running app</a>,
and <code>data-client-vue-testing</code> writes <code>renderDataCompose()</code> and <code>mountDataClient()</code> tests that follow the
<a class="" href="https://dataclient.io/pt-BR/vue/guides/unit-testing-composables">Vue testing guides</a>.
<a href="https://github.com/reactive/data-client/pull/4126" target="_blank" rel="noopener noreferrer" class="">#4126</a>,
<a href="https://github.com/reactive/data-client/pull/4181" target="_blank" rel="noopener noreferrer" class="">#4181</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="llms-txt">llms.txt<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#llms-txt" class="hash-link" aria-label="Link direto para llms.txt" title="Link direto para llms.txt" translate="no">​</a></h3>
<p>Agents without skills can read the docs as markdown, following the <a href="https://llmstxt.org/" target="_blank" rel="noopener noreferrer" class="">llms.txt</a> convention:</p>
<ul>
<li class=""><a href="https://dataclient.io/llms.txt" target="_blank" rel="noopener noreferrer" class="">llms.txt</a> for React and <a href="https://dataclient.io/vue/llms.txt" target="_blank" rel="noopener noreferrer" class="">vue/llms.txt</a> for Vue index every page, and <code>llms-full.txt</code> beside each holds them all in one file</li>
<li class=""><a href="https://dataclient.io/rest/llms.txt" target="_blank" rel="noopener noreferrer" class="">rest/llms.txt</a> and <a href="https://dataclient.io/graphql/llms.txt" target="_blank" rel="noopener noreferrer" class="">graphql/llms.txt</a> cover just that package's API</li>
<li class="">Any docs page is markdown when you add <code>.md</code> to its URL, like <a href="https://dataclient.io/docs/api/useSuspense.md" target="_blank" rel="noopener noreferrer" class="">/docs/api/useSuspense.md</a></li>
</ul>
<p>Every page links its llms.txt in <code>&lt;head&gt;</code>, and every docs page links its markdown, so an agent given any page URL
finds them on its own. The setup pages' markdown gives agents the setup steps directly.
<a href="https://github.com/reactive/data-client/pull/4171" target="_blank" rel="noopener noreferrer" class="">#4171</a>,
<a href="https://github.com/reactive/data-client/pull/4236" target="_blank" rel="noopener noreferrer" class="">#4236</a>,
<a href="https://github.com/reactive/data-client/pull/4427" target="_blank" rel="noopener noreferrer" class="">#4427</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="generated-references">Skills match the docs<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#generated-references" class="hash-link" aria-label="Link direto para Skills match the docs" title="Link direto para Skills match the docs" translate="no">​</a></h3>
<p>Skill reference pages are generated per framework from these docs, so they carry shared snippets like install commands
and give Vue projects only Vue code. A CI check fails when a skill drifts from the docs, so skills stay current with
each release. <a href="https://github.com/reactive/data-client/pull/4170" target="_blank" rel="noopener noreferrer" class="">#4170</a></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="batch-set">Batch Controller.set()<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#batch-set" class="hash-link" aria-label="Link direto para Batch Controller.set()" title="Link direto para Batch Controller.set()" translate="no">​</a></h2>
<p>A <a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers">Manager</a> that receives a stream of rows (like price tickers over a websocket) can now write
them all with one <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#set-array">Controller.set()</a> by passing an <a class="" href="https://dataclient.io/pt-BR/rest/api/Array">Array</a> schema.
Before v0.19, <code>[Ticker]</code> was a TypeScript error, so the usual workaround was a <code>set()</code> per row:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">ws</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function-variable function" style="color:rgb(130, 170, 255)">onmessage</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> event </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> rows </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">JSON</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">parse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">event</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> row </span><span class="token keyword" style="font-style:italic">of</span><span class="token plain"> rows</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Ticker</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> product_id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> row</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">product_id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> row</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">ws</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function-variable function" style="color:rgb(130, 170, 255)">onmessage</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> event </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> rows </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">JSON</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">parse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">event</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Ticker</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> rows</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p>Each row merges with its stored entity, and entities not in the list are untouched. Array schemas take no <code>args</code> and
no updater function. To batch mixed Entity types, deletes, or rows keyed by id, pass a <a class="" href="https://dataclient.io/pt-BR/rest/api/Union">Union</a>,
<a class="" href="https://dataclient.io/pt-BR/rest/api/Invalidate#batch-invalidation">Invalidate</a>, or <a class="" href="https://dataclient.io/pt-BR/rest/api/Values">Values</a> schema; see
<a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#set-array">Controller.set()</a> for examples.
<a href="https://github.com/reactive/data-client/pull/4103" target="_blank" rel="noopener noreferrer" class="">#4103</a></p>
<p>Try both buttons below. This browser check starts from an empty store and times <code>Promise.all</code> of 500 <code>set()</code>
calls against one batch <code>set()</code>. Both paths are one React commit, and each writes 500 new prices.</p>
<div data-playground="true" class="playgroundQueryContainer_vBqa"><div class="playgroundContainer_sLUA row_YGZs"><div class="playgroundTextEdit_rt2K withCover_yq1Z"><div class="editorBody_JtfR"><div class="editorDocs_INVk"><div class="playgroundHeader_Zx4K noupper_WDCF tabControls_trxh"><div class="tabs_m54V" role="tablist" aria-orientation="horizontal"><div role="tab" aria-selected="false" tabindex="-1" class="tab_bTGw">Ticker</div><div role="tab" aria-selected="true" tabindex="0" class="tab_bTGw selected_QXZk">PriceStream</div></div></div><div class="playgroundEditor_lYwu hidden_Hh8i"></div><div class="playgroundEditor_lYwu"><div><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#bfc7d5;background-color:transparent" spellcheck="false"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> useController</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> useQuery </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Ticker</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> newPrices </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'./Ticker'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">PriceStream</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ctrl </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useController</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">timing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setTiming</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> first </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">Ticker</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> product_id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'COIN-0'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">time</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    label</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">write</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">rows</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ReturnType</span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token keyword" style="font-style:italic">typeof</span><span class="token plain"> newPrices</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token known-class-name class-name" style="color:rgb(255, 203, 107)">Promise</span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token builtin" style="color:rgb(130, 170, 255)">unknown</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> rows </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">newPrices</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> start </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token dom variable" style="color:rgb(191, 199, 213)">performance</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">now</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">write</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">rows</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function" style="color:rgb(130, 170, 255)">setTiming</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">label</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string string" style="color:rgb(195, 232, 141)">: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string interpolation">performance</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation function" style="color:rgb(130, 170, 255)">now</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token template-string interpolation"> </span><span class="token template-string interpolation operator" style="color:rgb(137, 221, 255)">-</span><span class="token template-string interpolation"> start</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation function" style="color:rgb(130, 170, 255)">toFixed</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string interpolation number" style="color:rgb(247, 140, 108)">1</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string string" style="color:rgb(195, 232, 141)"> ms</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">perRow</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function" style="color:rgb(130, 170, 255)">time</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'500 set() calls'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> rows </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token known-class-name class-name" style="color:rgb(255, 203, 107)">Promise</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">all</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        rows</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">map</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">row </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">Ticker</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> product_id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> row</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">product_id</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> row</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// highlight-next-line</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">batch</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">time</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'1 batch set()'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> rows </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token maybe-class-name">Ticker</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> rows</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">button</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">perRow</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">set() per row</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token string" style="color:rgb(195, 232, 141)">' '</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">button</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">batch</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">batch set()</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">COIN-0: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">first </span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string string" style="color:rgb(195, 232, 141)">$</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">first</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">price</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'no data yet'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">timing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">render</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">PriceStream</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span>
</span></pre></div></div></div><div class="storeHost_N0SU"></div><button type="button" class="clean-btn swap_P7aB storeBadge_yrOO" title="Mostrar o store" aria-pressed="false" data-store-toggle="true"><span aria-hidden="false"><span class="storeBadgeDot_pVWi"></span>Store</span><span aria-hidden="true"><svg class="storeBadgeCode_DfYa" viewBox="0 0 24 24" width="1.15em" height="1.15em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m8 7-5 5 5 5M16 7l5 5-5 5M14 4l-4 16"></path></svg>Código</span></button></div></div><div class="previewWrapper_edd2"><div class="playgroundHeader_Zx4K previewHeader_MW_M"><span class="liveLabel_MHnJ"><span class="liveLabelText_k6qc">Pré-visualização</span></span><span class="routerSlot_CTii"></span><span class="previewControls_oxCt"><button type="button" class="clean-btn headerButton_h2KM storeHeaderToggle_ToEw" title="Mostrar o store" aria-label="Store" aria-pressed="false" data-store-toggle="true" disabled=""><svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="5" rx="8" ry="3"></ellipse><path d="M4 5v14c0 1.66 3.58 3 8 3s8-1.34 8-3V5"></path><path d="M4 12c0 1.66 3.58 3 8 3s8-1.34 8-3"></path></svg></button></span></div><div class="playgroundResult_tefG"><div class="playgroundPreview_rk9R"></div></div></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="batch-set-performance">Performance<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#batch-set-performance" class="hash-link" aria-label="Link direto para Performance" title="Link direto para Performance" translate="no">​</a></h3>
<p>Each <code>set()</code> is a separate store update, and every store update copies that entity type's table. Writing rows one
at a time repeats that copy for every row, so the cost grows with both the batch size and the store size. A batch
pays that copy once.</p>
<p>The chart is the node <code>setMany</code> benchmark in
<a href="https://github.com/reactive/data-client/blob/master/examples/benchmark/core.js" target="_blank" rel="noopener noreferrer" class="">examples/benchmark/core.js</a>:
a store that already holds 500 entities, then a synchronous <code>set()</code> per row against one <code>set([Ticker], rows)</code>.
It measures the store update: <strong>20x</strong> faster for 50 rows and <strong>95x</strong> faster for 500 rows.
<a href="https://github.com/reactive/data-client/pull/4103" target="_blank" rel="noopener noreferrer" class="">#4103</a></p>
<figure class="perfChart_LYCy"><figcaption class="text--center text--bold margin-bottom--sm">Node setMany into a 500-entity store</figcaption><div class="bars_HVEW" style="--perf-one:1.0485436893203883%"><div class="row_OlYf" aria-hidden="true"><span></span><span class="oneLabel_y_xM">1x</span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">50 rows</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:20.97087378640777%;--perf-split:5%"></span></span><span class="text--bold">20x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">One set() per row<!-- --> <!-- -->10.8<!-- --> <!-- -->ms<!-- --> → <!-- -->set([Ticker], rows)<!-- --> <strong>0.54<!-- --> <!-- -->ms</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">500 rows</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:100%;--perf-split:1.0485436893203883%"></span></span><span class="text--bold">95x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">One set() per row<!-- --> <!-- -->103<!-- --> <!-- -->ms<!-- --> → <!-- -->set([Ticker], rows)<!-- --> <strong>1.08<!-- --> <!-- -->ms</strong></span></span></div></div></figure>
<center><p><a href="https://reactive.github.io/data-client/dev/bench/" target="_blank" rel="noopener noreferrer" class="">Benchmarks over time</a> | <a href="https://github.com/reactive/data-client/blob/master/examples/benchmark/core.js" target="_blank" rel="noopener noreferrer" class="">View setMany benchmark</a></p></center>
<p>In a <a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers">Manager</a>, buffer incoming messages and flush each batch with one <code>set()</code>, as described in
<a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers#batching">Batching high-frequency updates</a>. The coin app's <code>StreamManager</code> now
flushes Coinbase ticker messages this way.</p>
<center><video width="600" controls="" muted="" playsinline="" loop="" aria-label="Redux DevTools for two copies of the coin app's StreamManager receiving three bursts of 500 ticker messages. Calling set() for each message logs 1,500 set actions, while buffering messages and flushing them with set([Ticker], rows) logs 3." style="width:100%"><source src="/pt-BR/videos/blog/batch-set-devtools.webm" type="video/webm">Redux DevTools for two copies of the coin app's StreamManager receiving three bursts of 500 ticker messages. Calling set() for each message logs 1,500 set actions, while buffering messages and flushing them with set([Ticker], rows) logs 3.</video></center>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">StreamManager.ts</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">handleMessage</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">msg</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">msg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name keyword" style="color:rgb(255, 203, 107);font-style:italic">in</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">buffer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">msg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">??=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">msg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">product_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> msg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">flushTimeout </span><span class="token operator" style="color:rgb(137, 221, 255)">??=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">setTimeout</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">flush</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">50</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function-variable function" style="color:rgb(130, 170, 255)">flush</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> buffer </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">buffer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">buffer </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">flushTimeout </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name keyword" style="color:rgb(255, 203, 107);font-style:italic">in</span><span class="token plain"> buffer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Object</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">values</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">buffer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<div class="card_wNtI"><p class="cardTitle_q8VY">Explore o exemplo coin-app</p><div class="cardLinks_EoYh"><a href="https://stackblitz.com/github/reactive/data-client/tree/master/examples/coin-app?file=src%2Fresources%2FStreamManager.ts%2Csrc%2FgetManagers.ts%2Csrc%2Fresources%2FTicker.ts" target="_blank" rel="noopener noreferrer" class="button button--primary">Abrir no StackBlitz</a><a href="https://github.com/reactive/data-client/tree/master/examples/coin-app" target="_blank" rel="noopener noreferrer" class="button button--secondary">Ver código-fonte</a></div></div><div class="wrapper_ZhQy"><span class="loading_rblT" aria-hidden="true">Carregando a demo…</span><iframe width="100%" height="600" title="Demo de coin-app no StackBlitz" class="frame_PtfY"></iframe></div><p style="text-align:center"><a class="button button--secondary button--sm" href="https://dataclient.io/pt-BR/demos">Mais demos</a></p>
<div class="theme-admonition theme-admonition-tip admonition_WCGJ alert alert--success"><div class="admonitionHeading_GCBg"><span class="admonitionIcon_L39b"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>dica</div><div class="admonitionContent_pbrs"><p>If you filter <a class="" href="https://dataclient.io/pt-BR/docs/api/DevToolsManager">DevToolsManager</a> actions by schema, a batched write's <code>action.schema</code>
is the Array schema, so match <code>action.schema[0]</code> for <code>[Ticker]</code> rather than the Entity itself.</p></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="faster-types">Faster TypeScript<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#faster-types" class="hash-link" aria-label="Link direto para Faster TypeScript" title="Link direto para Faster TypeScript" translate="no">​</a></h2>
<p>TypeScript re-checks your code on every keystroke in the editor and on every CI build. In apps with many endpoints,
heavy library types show up as laggy autocomplete, red squiggles that take seconds to appear, and slower builds.
v0.19 makes <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint">RestEndpoint</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/resource">resource()</a> and <code>.extend()</code> much cheaper
to check, with no code changes on your side. TypeScript still reports every error it reported before
(<a href="https://github.com/reactive/data-client/pull/4173" target="_blank" rel="noopener noreferrer" class="">#4173</a>).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="faster-types-results">Results<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#faster-types-results" class="hash-link" aria-label="Link direto para Results" title="Link direto para Results" translate="no">​</a></h3>
<p>Our heaviest stress test, a file of 150 RestEndpoints with long paths, <code>.extend()</code> and <code>.paginated()</code>, now checks
<strong>2x faster on TypeScript 6</strong> and <strong>2.2x faster on TypeScript 7</strong>, using about <strong>40% less memory</strong>. All numbers compare
the published v0.18.1 packages with v0.19; check times are the best of 10 runs.</p>
<figure class="perfChart_LYCy"><figcaption class="text--center text--bold margin-bottom--sm">Checking 150 RestEndpoints with long paths</figcaption><div class="bars_HVEW" style="--perf-one:41.66666666666667%"><div class="row_OlYf" aria-hidden="true"><span></span><span class="oneLabel_y_xM">1x</span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">TypeScript 6</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:80.5976430976431%;--perf-split:51.69712793733681%"></span></span><span class="text--bold">1.9x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->3.83<!-- --> <!-- -->s<!-- --> → <!-- -->v0.19<!-- --> <strong>1.98<!-- --> <!-- -->s</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">TypeScript 7</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:90.57971014492755%;--perf-split:45.99999999999999%"></span></span><span class="text--bold">2.2x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->1.5<!-- --> <!-- -->s<!-- --> → <!-- -->v0.19<!-- --> <strong>0.69<!-- --> <!-- -->s</strong></span></span></div></div></figure>
<figure class="perfChart_LYCy"><figcaption class="text--center text--bold margin-bottom--sm">Memory for the same file</figcaption><div class="bars_HVEW" style="--perf-one:41.66666666666667%"><div class="row_OlYf" aria-hidden="true"><span></span><span class="oneLabel_y_xM">1x</span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">TypeScript 6</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:72.07740916271722%;--perf-split:57.80821917808219%"></span></span><span class="text--bold">1.7x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->365<!-- --> <!-- -->MB<!-- --> → <!-- -->v0.19<!-- --> <strong>211<!-- --> <!-- -->MB</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">TypeScript 7</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:71.61458333333334%;--perf-split:58.18181818181818%"></span></span><span class="text--bold">1.7x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->220<!-- --> <!-- -->MB<!-- --> → <!-- -->v0.19<!-- --> <strong>128<!-- --> <!-- -->MB</strong></span></span></div></div></figure>
<p>Endpoint-heavy code does much less type work. Type instantiations are TypeScript's unit of work: they're
deterministic, so they compare cleanly across machines. Union does more work than in v0.18, because v0.19 now
<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typed-set" class="">type-checks set() values</a> (see below).</p>
<figure class="perfChart_LYCy"><figcaption class="text--center text--bold margin-bottom--sm">Type instantiations by stress test</figcaption><div class="bars_HVEW" style="--perf-one:41.48418491484185%"><div class="row_OlYf" aria-hidden="true"><span></span><span class="oneLabel_y_xM">1x</span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">Long paths</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:100%;--perf-split:41.48418491484185%"></span></span><span class="text--bold">2.4x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->822<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>341<!-- --> <!-- -->K</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">Typical app</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:62.53586084177651%;--perf-split:66.33663366336634%"></span></span><span class="text--bold">1.5x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->20.2<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>13.4<!-- --> <!-- -->K</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">React hooks</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:49.30497387419728%;--perf-split:84.13793103448275%"></span></span><span class="text--bold">1.2x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->145<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>122<!-- --> <!-- -->K</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">Vue</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:54.90295931647145%;--perf-split:75.5591054313099%"></span></span><span class="text--bold">1.3x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->62.6<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>47.3<!-- --> <!-- -->K</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">300 fields</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:55.09618309002433%;--perf-split:75.29411764705883%"></span></span><span class="text--bold">1.3x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->17<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>12.8<!-- --> <!-- -->K</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">Schemas</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:49.29641309115144%;--perf-split:84.15254237288136%"></span></span><span class="text--bold">1.2x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->118<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>99.3<!-- --> <!-- -->K</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">Union</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:23.189917033141402%;--perf-split:178.88888888888889%"></span><span class="shortfall_TA8N" style="left:23.189917033141402%;width:18.294267881700442%"></span></span><span class="worse_OhAz">0.6x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->9<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>16.1<!-- --> <!-- -->K</strong></span></span></div></div></figure>
<p>Hover or tap a cell for exact numbers.</p>
<div class="scroll_C2fg"><table class="perfTable_gnxQ"><thead><tr><th></th><th>TS 6 check time</th><th>TS 7 check time</th><th>TS 6 memory</th></tr></thead><tbody><tr><th scope="row">Long paths<div class="description_oO4J">150 RestEndpoints with 6-param paths, <code>.extend()</code> and <code>.paginated()</code></div></th><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:51.697127937336816%"></span></div><span class="better_Bdvc">-48%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">3.83<!-- -->s<!-- --> →<!-- --> <strong>1.98<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:46%"></span></div><span class="better_Bdvc">-54%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">1.5<!-- -->s<!-- --> →<!-- --> <strong>0.69<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:57.80821917808219%"></span></div><span class="better_Bdvc">-42%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">365<!-- -->MB<!-- --> →<!-- --> <strong>211<!-- -->MB</strong></span></span></td></tr><tr><th scope="row">Typical app<div class="description_oO4J">A few resources with <code>.extend()</code>, <code>.paginated()</code> and hooks</div></th><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:100%"></span></div><span class="same_qjOp">same</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">0.42<!-- -->s<!-- --> →<!-- --> <strong>0.42<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:85.48387096774194%"></span></div><span class="better_Bdvc">-15%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">0.062<!-- -->s<!-- --> →<!-- --> <strong>0.053<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:97.24770642201835%"></span><span class="barAfter_V9wC" style="width:100%"></span></div><span class="worse_ycwO">+3%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">106<!-- -->MB<!-- --> →<!-- --> <strong>109<!-- -->MB</strong></span></span></td></tr><tr><th scope="row">React hooks<div class="description_oO4J">40 resources through every hook, plus <code>ctrl.fetch()</code> and <code>ctrl.set()</code></div></th><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:90.3225806451613%"></span></div><span class="better_Bdvc">-10%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">1.24<!-- -->s<!-- --> →<!-- --> <strong>1.12<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:92.6829268292683%"></span></div><span class="better_Bdvc">-7%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">0.41<!-- -->s<!-- --> →<!-- --> <strong>0.38<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:94.01197604790418%"></span></div><span class="better_Bdvc">-6%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">167<!-- -->MB<!-- --> →<!-- --> <strong>157<!-- -->MB</strong></span></span></td></tr><tr><th scope="row">Vue<div class="description_oO4J">The same 40 resources through every composable</div></th><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:100%"></span></div><span class="same_qjOp">same</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">0.68<!-- -->s<!-- --> →<!-- --> <strong>0.68<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:88.23529411764704%"></span></div><span class="better_Bdvc">-12%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">0.17<!-- -->s<!-- --> →<!-- --> <strong>0.15<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:95.86206896551724%"></span></div><span class="better_Bdvc">-4%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">145<!-- -->MB<!-- --> →<!-- --> <strong>139<!-- -->MB</strong></span></span></td></tr><tr><th scope="row">300 fields<div class="description_oO4J">One Entity with 300 fields, read and updated 100 times</div></th><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:86.36363636363636%"></span></div><span class="better_Bdvc">-14%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">0.44<!-- -->s<!-- --> →<!-- --> <strong>0.38<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:60.465116279069775%"></span></div><span class="better_Bdvc">-40%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">0.086<!-- -->s<!-- --> →<!-- --> <strong>0.052<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:90.990990990991%"></span></div><span class="better_Bdvc">-9%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">111<!-- -->MB<!-- --> →<!-- --> <strong>101<!-- -->MB</strong></span></span></td></tr><tr><th scope="row">Schemas<div class="description_oO4J">All, Query, Invalidate, Array, Object and Collection</div></th><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:97.27272727272727%"></span></div><span class="better_Bdvc">-3%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">1.1<!-- -->s<!-- --> →<!-- --> <strong>1.07<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:86.11111111111111%"></span></div><span class="better_Bdvc">-14%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">0.36<!-- -->s<!-- --> →<!-- --> <strong>0.31<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:96.15384615384616%"></span></div><span class="better_Bdvc">-4%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">156<!-- -->MB<!-- --> →<!-- --> <strong>150<!-- -->MB</strong></span></span></td></tr><tr><th scope="row">Union<div class="description_oO4J">A 30-member Union in a Collection and Values</div></th><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:97.61904761904762%"></span></div><span class="better_Bdvc">-2%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">0.42<!-- -->s<!-- --> →<!-- --> <strong>0.41<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:95.77464788732397%"></span></div><span class="better_Bdvc">-4%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">0.071<!-- -->s<!-- --> →<!-- --> <strong>0.068<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:94.39252336448598%"></span></div><span class="better_Bdvc">-6%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">107<!-- -->MB<!-- --> →<!-- --> <strong>101<!-- -->MB</strong></span></span></td></tr><tr><th scope="row">set() values<div class="description_oO4J">1000 <code>ctrl.set()</code> calls on a 30-member Union, a Collection of it and a 300-field Entity</div></th><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:71.81208053691276%"></span></div><span class="better_Bdvc">-28%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">1.49<!-- -->s<!-- --> →<!-- --> <strong>1.07<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:46.29629629629629%"></span></div><span class="better_Bdvc">-54%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">0.54<!-- -->s<!-- --> →<!-- --> <strong>0.25<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:74.43181818181817%"></span></div><span class="better_Bdvc">-26%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">176<!-- -->MB<!-- --> →<!-- --> <strong>131<!-- -->MB</strong></span></span></td></tr><tr><th scope="row">set() updaters<div class="description_oO4J">1000 <code>ctrl.set(Union, args, prev =&gt; ...)</code> updaters on a 30-member Union</div></th><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:100%"></span><span class="barAfter_V9wC" style="width:95.8100558659218%"></span></div><span class="better_Bdvc">-4%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">3.58<!-- -->s<!-- --> →<!-- --> <strong>3.43<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:90.27027027027026%"></span><span class="barAfter_V9wC" style="width:100%"></span></div><span class="worse_ycwO">+11%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">1.67<!-- -->s<!-- --> →<!-- --> <strong>1.85<!-- -->s</strong></span></span></td><td class="anchor_tRSI" tabindex="0"><div class="cell_YlFy"><div class="bars_qVXI" aria-hidden="true"><span class="barBefore_uor8" style="width:99.21875%"></span><span class="barAfter_V9wC" style="width:100%"></span></div><span class="worse_ycwO">+1%</span></div><span class="tip_ZJ8Q tip_kDq8"><span class="bubble_XBbb">381<!-- -->MB<!-- --> →<!-- --> <strong>384<!-- -->MB</strong></span></span></td></tr></tbody></table></div>
<p>The set() rows measure <a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typed-set" class="">typed set() values</a>, which v0.18 didn't check at all. Plain values still check
faster than before, and updater functions on large Unions check in about the same time even though TypeScript now
checks each updater's return value (<a href="https://github.com/reactive/data-client/pull/4179" target="_blank" rel="noopener noreferrer" class="">#4179</a>).</p>
<p>Small files are dominated by TypeScript's fixed startup cost (loading <code>lib.dom.d.ts</code> alone takes about 100MB), so
their time and memory barely move. The savings add up as a codebase grows.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="faster-types-how">What changed<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#faster-types-how" class="hash-link" aria-label="Link direto para What changed" title="Link direto para What changed" translate="no">​</a></h3>
<ul>
<li class=""><code>.extend()</code> and <code>.paginated()</code> are shared across all endpoints instead of re-created for each endpoint type.</li>
<li class="">Endpoint options infer as plain object types, so TypeScript stops rebuilding them at every use.</li>
<li class="">Path parameters like <code>/users/:id</code> are read in a single pass.</li>
</ul>
<p>Before shipping, we turned off every <code>@ts-expect-error</code> in the test suite on TypeScript 4.0 through 7 and confirmed
every error still appears in the same place.</p>
<p>On TypeScript 5.x and earlier, a <code>process(value, params)</code> method passed to <code>.extend()</code> also no longer fails with
"implicitly has an 'any' type" under <code>strict</code>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="other-improvements">Other improvements<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#other-improvements" class="hash-link" aria-label="Link direto para Other improvements" title="Link direto para Other improvements" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="typed-set">Typed set() values<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typed-set" class="hash-link" aria-label="Link direto para Typed set() values" title="Link direto para Typed set() values" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#set">Controller.set()</a> previously accepted any value for a schema, so a typo or a wrong
field type only surfaced as bad data at runtime. Values are now typed by the schema: an
<a class="" href="https://dataclient.io/pt-BR/rest/api/Entity">Entity</a> takes its fields, while a <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/All">All</a> or
Array takes a list of rows. Every field is optional, since <code>set()</code> merges into what is already stored, and
numbers and strings are interchangeable just like in API responses.
<a href="https://github.com/reactive/data-client/pull/4133" target="_blank" rel="noopener noreferrer" class="">#4133</a></p>
<p>Hover the red underlines to see each error.</p>
<div class="playgroundQueryContainer_vBqa"><div class="playgroundContainer_sLUA standaloneEditor_OHub"><div class="playgroundTextEdit_rt2K"><div class="playgroundHeader_Zx4K noupper_WDCF tabControls_trxh small_xksL"><div class="tabs_m54V" role="tablist" aria-orientation="horizontal"><div role="tab" aria-selected="false" tabindex="-1" class="tab_bTGw">Todo</div><div role="tab" aria-selected="true" tabindex="0" class="tab_bTGw selected_QXZk">updateTodos</div></div></div><div class="playgroundEditor_lYwu hidden_Hh8i"></div><div class="playgroundEditor_lYwu"><div><pre class="prism-code language-ts" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#bfc7d5;background-color:transparent" spellcheck="false"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Controller </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> schema </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> TodoResource </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'./Todo'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">updateTodos</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">ctrl</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// ✅ rows are partial Todos; ids may be strings or numbers</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">TodoResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'5'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> completed</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> todo </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> completed</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">completed </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> title</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'first'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// ❌ All takes a list of rows</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">All</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">42</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// ❌ completed is a boolean</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> completed</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'yes'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// ❌ Todo has no done field</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">TodoResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> done</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// ❌ updaters must return Todo fields</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> todo </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> title</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">completed </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span>
</span></pre></div></div></div></div></div>
<p>A <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a> takes the input of the schema it wraps, since <code>set()</code> normalizes that schema rather than
reversing <code>process()</code>. When each member declares its discriminator as a literal (like <code>readonly type = 'post'</code>), a
<a class="" href="https://dataclient.io/pt-BR/rest/api/Union">Union</a> row is checked against the member it selects, so it can't mix fields from different members; see <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#set">Unions</a>.</p>
<p>If code that previously compiled now fails here, it was writing data its schema doesn't describe. Fix the value,
or widen the Entity's field types if the data really can take that shape.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="set-invalidate">Delete one entity with set()<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#set-invalidate" class="hash-link" aria-label="Link direto para Delete one entity with set()" title="Link direto para Delete one entity with set()" translate="no">​</a></h3>
<p>Passing an <a class="" href="https://dataclient.io/pt-BR/rest/api/Invalidate">Invalidate</a> schema to <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#set-array">Controller.set()</a> deletes the
entity its row identifies, but the single form was a TypeScript error, so code wrapped it in a one-row batch. It now
type-checks, with the row typed by the Entity's fields
(<a href="https://github.com/reactive/data-client/pull/4230" target="_blank" rel="noopener noreferrer" class="">#4230</a>):</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Invalidate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'5'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Invalidate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'5'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p>Like batch <code>set()</code>, it takes no <code>args</code> and no updater function.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="extend-process-params">Typed process() params<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#extend-process-params" class="hash-link" aria-label="Link direto para Typed process() params" title="Link direto para Typed process() params" translate="no">​</a></h3>
<p>A <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#process">process()</a> method passed to <code>new RestEndpoint()</code>,
<a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#extend">.extend()</a> or <a class="" href="https://dataclient.io/pt-BR/rest/api/resource#extend">resource().extend()</a> got <code>params</code> typed as
<code>any</code>, so reading a parameter the endpoint doesn't have compiled and returned <code>undefined</code> at runtime. <code>params</code> and
<code>body</code> are now typed from the endpoint, including a <code>path</code> set in the same <code>.extend()</code> call
(<a href="https://github.com/reactive/data-client/pull/4183" target="_blank" rel="noopener noreferrer" class="">#4183</a>, <a href="https://github.com/reactive/data-client/pull/4184" target="_blank" rel="noopener noreferrer" class="">#4184</a>):</p>
<div class="playgroundQueryContainer_vBqa"><div class="playgroundContainer_sLUA standaloneEditor_OHub"><div class="playgroundTextEdit_rt2K"><div class="playgroundEditor_lYwu"><div><pre class="prism-code language-ts" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#bfc7d5;background-color:transparent" spellcheck="false"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> RestEndpoint </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getUser </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/users/:id'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getUserById </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> getUser</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">extend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/users/by-id/:userId'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">process</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> params</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> userId</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">|</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> params</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">userId</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// @ts-expect-error 'id' is not a param of '/users/by-id/:userId'</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    params</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> userId </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span>
</span></pre></div></div></div></div></div>
<p>When every param is optional, <code>params</code> may be <code>undefined</code>, so read it with <code>params?.page</code>.</p>
<p>This can surface new TypeScript errors in existing <code>process()</code> methods. Each one marks a read that could be <code>undefined</code>
or throw at runtime, so fix the param name or add the missing check.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="typed-optimistic-response">Typed optimistic responses<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typed-optimistic-response" class="hash-link" aria-label="Link direto para Typed optimistic responses" title="Link direto para Typed optimistic responses" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#getoptimisticresponse">getOptimisticResponse()</a> could return anything unless the endpoint had
a typed <code>process()</code>, so a wrong field type only showed up as bad data in the UI until the server responded. The return
value is now checked against the endpoint's schema, like a <a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typed-set" class="">typed set() value</a>: an Entity takes any of its
fields, and a <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a> takes a list of them
(<a href="https://github.com/reactive/data-client/pull/4198" target="_blank" rel="noopener noreferrer" class="">#4198</a>):</p>
<div class="playgroundQueryContainer_vBqa"><div class="playgroundContainer_sLUA standaloneEditor_OHub"><div class="playgroundTextEdit_rt2K"><div class="playgroundEditor_lYwu"><div><pre class="prism-code language-ts" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#bfc7d5;background-color:transparent" spellcheck="false"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> RestEndpoint </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Todo</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  title </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  completed </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> toggleTodo </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/todos/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  method</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'PATCH'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// @ts-expect-error completed is a boolean; 'false' is truthy, so the checkbox would stay checked</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">getOptimisticResponse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">snap</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> todo </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> snap</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">throw</span><span class="token plain"> snap</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">abort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> completed</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">completed </span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'false'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'true'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span>
</span></pre></div></div></div></div></div>
<p>This can surface new TypeScript errors in existing <code>getOptimisticResponse()</code> methods. Each one marks a value that would
be stored with the wrong type until the server responds, so return the field's real type (here <code>!todo.completed</code>).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="query-collection-push">Typed push() on sorted Collections<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#query-collection-push" class="hash-link" aria-label="Link direto para Typed push() on sorted Collections" title="Link direto para Typed push() on sorted Collections" translate="no">​</a></h3>
<p>Wrapping a <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a> in a <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a> to sort or filter it made
<a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#push">push</a>, <code>unshift</code> and <code>remove</code> reject every body except <code>FormData</code>, though they add to the
list at runtime. The body is now typed from the Collection's Entity, so the cast can go and a wrong field is a
TypeScript error. The same applies to a Collection wrapped in <a class="" href="https://dataclient.io/pt-BR/rest/api/Lazy">Lazy</a>
(<a href="https://github.com/reactive/data-client/pull/4226" target="_blank" rel="noopener noreferrer" class="">#4226</a>).</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> useController </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> getPosts </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'./getPosts'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useAddPost</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ctrl </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useController</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">title</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> author</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getPosts</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">push</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> group</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'react'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> author </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> useController </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> getPosts </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'./getPosts'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useAddPost</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ctrl </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useController</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">title</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> author</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getPosts</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">push</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> group</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'react'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> author </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<p>where <code>getPosts</code> sorts its Collection with a Query:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">getPosts.ts</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> RestEndpoint </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Post</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  title </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  group </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  author </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getPosts </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/:group/posts'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  searchParams</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> orderBy</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'title'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">|</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'author'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> nonFilterArgumentKeys</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token regex regex-delimiter">/</span><span class="token regex regex-source language-regex">orderBy</span><span class="token regex regex-delimiter">/</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">posts</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> orderBy </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> orderBy</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'title'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">|</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'author'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      orderBy </span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">posts</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">sort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">a</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> b</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> a</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">orderBy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">localeCompare</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">b</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">orderBy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> posts</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="create-formdata">FormData in resource().create<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#create-formdata" class="hash-link" aria-label="Link direto para FormData in resource().create" title="Link direto para FormData in resource().create" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/resource">resource()</a>'s <code>create</code> sends a <code>FormData</code> body as-is, like <code>update</code>, <code>partialUpdate</code> and
<a class="" href="https://dataclient.io/pt-BR/rest/api/resource#push">getList.push</a>, but its type only allowed an object, so submitting a form needed a cast
(<a href="https://github.com/reactive/data-client/pull/4235" target="_blank" rel="noopener noreferrer" class="">#4235</a>). Drop the cast:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">form</span><span class="token tag" style="color:rgb(255, 85, 114)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token tag" style="color:rgb(255, 85, 114)">  </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">onSubmit</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">e </span><span class="token tag script language-javascript arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">    e</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript method function property-access" style="color:rgb(130, 170, 255)">preventDefault</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">    ctrl</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript method function property-access" style="color:rgb(130, 170, 255)">fetch</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript maybe-class-name" style="color:rgb(255, 85, 114)">PostResource</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(255, 85, 114)">create</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript keyword" style="color:rgb(255, 85, 114);font-style:italic">new</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript class-name" style="color:rgb(255, 203, 107)">FormData</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">e</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(255, 85, 114)">currentTarget</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript keyword" style="color:rgb(255, 85, 114);font-style:italic">as</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript builtin" style="color:rgb(130, 170, 255)">any</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">  </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(255, 85, 114)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token tag" style="color:rgb(255, 85, 114)"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">form</span><span class="token tag" style="color:rgb(255, 85, 114)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token tag" style="color:rgb(255, 85, 114)">  </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">onSubmit</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">e </span><span class="token tag script language-javascript arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">    e</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript method function property-access" style="color:rgb(130, 170, 255)">preventDefault</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">    ctrl</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript method function property-access" style="color:rgb(130, 170, 255)">fetch</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript maybe-class-name" style="color:rgb(255, 85, 114)">PostResource</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(255, 85, 114)">create</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript keyword" style="color:rgb(255, 85, 114);font-style:italic">new</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript class-name" style="color:rgb(255, 203, 107)">FormData</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">e</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(255, 85, 114)">currentTarget</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">  </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(255, 85, 114)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token tag" style="color:rgb(255, 85, 114)"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></figure>
<p><code>create</code> is deprecated; <a class="" href="https://dataclient.io/pt-BR/rest/api/resource#push">getList.push</a> is its replacement and takes <code>FormData</code> too.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="vue-getter-args">Vue getter arguments<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#vue-getter-args" class="hash-link" aria-label="Link direto para Vue getter arguments" title="Link direto para Vue getter arguments" translate="no">​</a></h3>
<p>Vue composables like <a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> and <a class="" href="https://dataclient.io/pt-BR/vue/api/useLive">useLive()</a> were typed to accept a
getter function as an argument, but they passed the function itself to the endpoint instead of calling it. Getters now
work the same as refs and <code>computed</code>, and the composable refetches when anything the getter reads changes
(<a href="https://github.com/reactive/data-client/pull/4115" target="_blank" rel="noopener noreferrer" class="">#4115</a>). Drop the <code>computed()</code> wrapper if you only used it to make
arguments reactive:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> computed </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'vue'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> props </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:rgb(130, 170, 255)">defineProps</span><span class="token generic-function generic class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token generic-function generic class-name punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 107)"> id</span><span class="token generic-function generic class-name operator" style="color:rgb(137, 221, 255)">:</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 107)"> </span><span class="token generic-function generic class-name builtin" style="color:rgb(130, 170, 255)">number</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 107)"> </span><span class="token generic-function generic class-name punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token generic-function generic class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> article </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useSuspense</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  ArticleResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">computed</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> props</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> props </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:rgb(130, 170, 255)">defineProps</span><span class="token generic-function generic class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token generic-function generic class-name punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 107)"> id</span><span class="token generic-function generic class-name operator" style="color:rgb(137, 221, 255)">:</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 107)"> </span><span class="token generic-function generic class-name builtin" style="color:rgb(130, 170, 255)">number</span><span class="token generic-function generic class-name" style="color:rgb(255, 203, 107)"> </span><span class="token generic-function generic class-name punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token generic-function generic class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> article </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useSuspense</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">ArticleResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> props</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p>This applies to every composable that takes endpoint arguments: <a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a>,
<a class="" href="https://dataclient.io/pt-BR/vue/api/useLive">useLive()</a>, <a class="" href="https://dataclient.io/pt-BR/vue/api/useCache">useCache()</a>, <a class="" href="https://dataclient.io/pt-BR/vue/api/useDLE">useDLE()</a>,
<a class="" href="https://dataclient.io/pt-BR/vue/api/useFetch">useFetch()</a>, <a class="" href="https://dataclient.io/pt-BR/vue/api/useQuery">useQuery()</a> and <a class="" href="https://dataclient.io/pt-BR/vue/api/useSubscription">useSubscription()</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="vue-gc">Vue garbage collects by default<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#vue-gc" class="hash-link" aria-label="Link direto para Vue garbage collects by default" title="Link direto para Vue garbage collects by default" translate="no">​</a></h3>
<p>Vue's <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin#gcPolicy">DataClientPlugin</a> only removed unused data if you passed a <code>gcPolicy</code>
yourself. It now defaults to <code>new GCPolicy()</code>, the same as React's <a class="" href="https://dataclient.io/pt-BR/docs/api/DataProvider">DataProvider</a>, so you can
drop the option unless you customize it (<a href="https://github.com/reactive/data-client/pull/4148" target="_blank" rel="noopener noreferrer" class="">#4148</a>).</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> DataClientPlugin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> GCPolicy </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/vue'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">use</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">DataClientPlugin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> gcPolicy</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">GCPolicy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> DataClientPlugin </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/vue'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">use</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">DataClientPlugin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p>Data is removed only when no mounted component reads it <em>and</em> twice its freshness lifetime has passed since it was
fetched (at least two minutes). A sweep checks every five minutes. Anything a component reads again before then is
back in use.</p>
<center><div style="max-width:640px"></div></center>
<p>A component that mounts after removal treats the data as never fetched: <a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> fetches
it again, while <a class="" href="https://dataclient.io/pt-BR/vue/api/useCache">useCache()</a> returns <code>undefined</code>. To keep unused data longer or sweep less often,
pass your own <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin#gcPolicy">gcPolicy</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="vue-stale-while-revalidate">Vue stale-while-revalidate<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#vue-stale-while-revalidate" class="hash-link" aria-label="Link direto para Vue stale-while-revalidate" title="Link direto para Vue stale-while-revalidate" translate="no">​</a></h3>
<p>When a component mounts with data that is <a class="" href="https://dataclient.io/pt-BR/docs/concepts/expiry-policy#stale">stale</a> but still valid, Vue
<a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> now renders it right away and refetches in the background, like React. Before,
it showed the <code>&lt;Suspense&gt;</code> fallback until the refetch finished (<a href="https://github.com/reactive/data-client/pull/4169" target="_blank" rel="noopener noreferrer" class="">#4169</a>).</p>
<center><video width="720" controls="" muted="" playsinline="" loop="" aria-label="Two Vue components side by side, before and after v0.19. Both show Loading on first mount. After unmounting and waiting until the price goes stale, remounting shows Loading again in the before version, while the after version shows the stale price right away and refetches in the background."><source src="/pt-BR/videos/blog/vue-suspense-stale.mp4" type="video/mp4">Two Vue components side by side, before and after v0.19. Both show Loading on first mount. After unmounting and waiting until the price goes stale, remounting shows Loading again in the before version, while the after version shows the stale price right away and refetches in the background.</video></center>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="entity-pk-args">Entity classes typecheck as EntityInterface<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#entity-pk-args" class="hash-link" aria-label="Link direto para Entity classes typecheck as EntityInterface" title="Link direto para Entity classes typecheck as EntityInterface" translate="no">​</a></h3>
<p>Helpers typed to accept any Entity with <code>EntityInterface</code> rejected Entity classes, because
<a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#pk">Entity.pk()</a> typed its <code>args</code> as a mutable array. It is now <code>readonly any[]</code>, so this
typechecks (<a href="https://github.com/reactive/data-client/pull/4149" target="_blank" rel="noopener noreferrer" class="">#4149</a>):</p>
<div class="playgroundQueryContainer_vBqa"><div class="playgroundContainer_sLUA standaloneEditor_OHub"><div class="playgroundTextEdit_rt2K"><div class="playgroundEditor_lYwu"><div><pre class="prism-code language-ts" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#bfc7d5;background-color:transparent" spellcheck="false"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Entity </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> EntityInterface </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">User</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  name </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">entityName</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> EntityInterface</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">entityName</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span>
</span></pre></div></div></div></div></div>
<p>If you override <code>static pk()</code> and type <code>args</code> as a mutable array, it still compiles, but a future breaking release
will require <code>readonly</code>; <a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#future-pk-args" class="">update it now</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="deleted-entity-undefined">Deleted entities read as undefined<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#deleted-entity-undefined" class="hash-link" aria-label="Link direto para Deleted entities read as undefined" title="Link direto para Deleted entities read as undefined" translate="no">​</a></h3>
<p>When an entity was deleted and its refetch failed, <a class="" href="https://dataclient.io/pt-BR/docs/api/useCache">useCache()</a> and <a class="" href="https://dataclient.io/pt-BR/docs/api/useDLE">useDLE()</a>
(React and Vue) returned an internal <code>Symbol</code> as data. A <code>Symbol</code> is truthy, so the usual "not loaded yet" guard let it
through and the component rendered as if it had an entity
(<a href="https://github.com/reactive/data-client/pull/4150" target="_blank" rel="noopener noreferrer" class="">#4150</a>):</p>
<div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">TodoDetail</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> todo </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">TodoResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// a deleted todo used to get past this guard, so todo.title.trim() threw</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">TodoPlaceholder</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">h3</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">trim</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">h3</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<p>Now <code>data</code> is <code>undefined</code>, matching its type and <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#get">Controller.get()</a>. The same applies to
<a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#getResponse">Controller.getResponse()</a> and
<a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#fetchIfStale">Controller.fetchIfStale()</a>, for example in custom <a class="" href="https://dataclient.io/pt-BR/docs/api/Manager">Managers</a>.</p>
<p>If you worked around this, the workaround can go. A plain truthiness check is enough:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">TodoDetail</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> todo </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">TodoResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">todo </span><span class="token operator" style="color:rgb(137, 221, 255)">||</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">typeof</span><span class="token plain"> todo </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'symbol'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">TodoPlaceholder</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">h3</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">trim</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">h3</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">TodoDetail</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> todo </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">TodoResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">TodoPlaceholder</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">h3</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">trim</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">h3</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<p>To show something specific when the refetch failed (for example a 404 after deletion), read <code>error</code> from
<a class="" href="https://dataclient.io/pt-BR/docs/api/useDLE">useDLE()</a> rather than inspecting <code>data</code>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="devtools-perf">Faster Redux DevTools<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#devtools-perf" class="hash-link" aria-label="Link direto para Faster Redux DevTools" title="Link direto para Faster Redux DevTools" translate="no">​</a></h3>
<p>With the <a class="" href="https://dataclient.io/pt-BR/docs/getting-started/debugging">Redux DevTools</a> extension open, every store update in development
serializes the whole store for the extension, and each timestamp in it was formatted the slow way. Large stores or
frequent updates, like polling, live data or many <code>controller.set()</code> calls, made the page stutter. Each update now
serializes <strong>40-60x faster</strong>, and timestamps still read like <code>10:42:07.123 AM</code>
(<a href="https://github.com/reactive/data-client/pull/4163" target="_blank" rel="noopener noreferrer" class="">#4163</a>). Production builds don't include DevTools, so they are
unaffected.</p>
<figure class="perfChart_LYCy"><figcaption class="text--center text--bold margin-bottom--sm">DevTools serialization per store update</figcaption><div class="bars_HVEW" style="--perf-one:1.6666666666666663%"><div class="row_OlYf" aria-hidden="true"><span></span><span class="oneLabel_y_xM">1x</span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">50 entities</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:100%;--perf-split:1.6666666666666663%"></span></span><span class="text--bold">60x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->18.6<!-- --> <!-- -->ms<!-- --> → <!-- -->v0.19<!-- --> <strong>0.31<!-- --> <!-- -->ms</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">500 entities</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:67%;--perf-split:2.487562189054726%"></span></span><span class="text--bold">40x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">v0.18<!-- --> <!-- -->201<!-- --> <!-- -->ms<!-- --> → <!-- -->v0.19<!-- --> <strong>5<!-- --> <!-- -->ms</strong></span></span></div></div></figure>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="migration-guide">Migration guide<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#migration-guide" class="hash-link" aria-label="Link direto para Migration guide" title="Link direto para Migration guide" translate="no">​</a></h2>
<!-- -->
<p>This upgrade requires updating all package versions simultaneously.</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">NPM</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">esm.sh</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> @data-client/react@^0.19.0 @data-client/rest@^0.19.0 @data-client/endpoint@^0.19.0 @data-client/core@^0.19.0 @data-client/vue@^0.19.0 @data-client/test@^0.19.0 @data-client/img@^0.19.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">yarn</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.19.0 @data-client/rest@^0.19.0 @data-client/endpoint@^0.19.0 @data-client/core@^0.19.0 @data-client/vue@^0.19.0 @data-client/test@^0.19.0 @data-client/img@^0.19.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.19.0 @data-client/rest@^0.19.0 @data-client/endpoint@^0.19.0 @data-client/core@^0.19.0 @data-client/vue@^0.19.0 @data-client/test@^0.19.0 @data-client/img@^0.19.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="language-html codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-html codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">importmap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript string-property property">"imports"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/react"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/react@^0.19.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/rest"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/rest@^0.19.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/endpoint"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/endpoint@^0.19.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/core"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/core@^0.19.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/vue"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/vue@^0.19.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/test"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/test@^0.19.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/img"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/img@^0.19.0"</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="typescript-4">TypeScript 4.0 or later<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typescript-4" class="hash-link" aria-label="Link direto para TypeScript 4.0 or later" title="Link direto para TypeScript 4.0 or later" translate="no">​</a></h3>
<p>Skip this section if you already use TypeScript 4.0 or later.</p>
<p>The TypeScript 3.x declarations are removed, since they no longer typechecked on any TypeScript 3.x version. Bump
<code>typescript</code> to <code>^4.0.0</code> or later in your <code>devDependencies</code>. <a href="https://github.com/reactive/data-client/pull/4151" target="_blank" rel="noopener noreferrer" class="">#4151</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="manager-middleware">Manager.middleware is required<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#manager-middleware" class="hash-link" aria-label="Link direto para Manager.middleware is required" title="Link direto para Manager.middleware is required" translate="no">​</a></h3>
<p>Skip this section if your <a class="" href="https://dataclient.io/pt-BR/docs/api/Manager">Managers</a> already define <code>middleware</code>.</p>
<p><code>getMiddleware()</code> was replaced by the <a class="" href="https://dataclient.io/pt-BR/docs/api/Manager#middleware">middleware</a> property in
<a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement">v0.14</a>; it's now removed. A Manager that still defines it, or has no
middleware at all, is a TypeScript error, and throws when <code>DataProvider</code> or <code>DataClientPlugin</code> mounts in development.
Rename <code>getMiddleware()</code> to a <code>middleware</code> property:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">LoggingManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  getMiddleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Middleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'before'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'after'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">LoggingManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  middleware</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">Middleware</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'before'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'after'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<p><a href="https://github.com/reactive/data-client/pull/4382" target="_blank" rel="noopener noreferrer" class="">#4382</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="test-react-0.15">@data-client/test requires @data-client/react 0.15.3<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#test-react-0.15" class="hash-link" aria-label="Link direto para @data-client/test requires @data-client/react 0.15.3" title="Link direto para @data-client/test requires @data-client/react 0.15.3" translate="no">​</a></h3>
<p>Skip this section if you don't use <a href="https://www.npmjs.com/package/@data-client/test" target="_blank" rel="noopener noreferrer" class="">@data-client/test</a>.</p>
<p><code>@data-client/test</code> now builds on <code>@data-client/react/mock</code>, which first loads in Jest and other CommonJS tests in
<code>@data-client/react</code> 0.15.3, so support for 0.12 through 0.15.2 is dropped. Upgrade <code>@data-client/react</code> to the same
version as <code>@data-client/test</code>, as the install command above does. Fixture types imported from <code>@data-client/test</code> and
from <code>@data-client/react/mock</code> are now the same types. <a href="https://github.com/reactive/data-client/pull/4414" target="_blank" rel="noopener noreferrer" class="">#4414</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="dc-global"><code>__DC_CONTROLLERS__</code> is now <code>__DC__</code><a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#dc-global" class="hash-link" aria-label="Link direto para dc-global" title="Link direto para dc-global" translate="no">​</a></h3>
<p>Skip this section if no debugging script or tool of yours reads <code>globalThis.__DC_CONTROLLERS__</code>.</p>
<p>In development, <a class="" href="https://dataclient.io/pt-BR/docs/api/DevToolsManager#controllers">DevToolsManager</a> now puts the store on <code>globalThis.__DC__</code>,
whose <code>controller</code> and <code>actions</code> read the page's store, instead of the <code>__DC_CONTROLLERS__</code> Map. With several stores,
<code>__DC__.stores</code> lists their keys and setting <code>__DC__.store</code> picks one.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-js codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-js codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">__DC_CONTROLLERS__</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'Data Client: My App'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">getState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-js codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-js codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">__DC__</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">store</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Data Client: My App'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// only needed with several stores</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">__DC__</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">getState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p><a href="https://github.com/reactive/data-client/pull/4435" target="_blank" rel="noopener noreferrer" class="">#4435</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="future-releases">Get ready for future releases<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#future-releases" class="hash-link" aria-label="Link direto para Get ready for future releases" title="Link direto para Get ready for future releases" translate="no">​</a></h3>
<p>Nothing here is needed to upgrade to 0.19; your code keeps working as is. Each item will break in a future release,
so updating now makes that upgrade a no-op.</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="future-pk-args">Entity.pk() args are readonly<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#future-pk-args" class="hash-link" aria-label="Link direto para Entity.pk() args are readonly" title="Link direto para Entity.pk() args are readonly" translate="no">​</a></h4>
<p>Skip this if you don't override <code>static pk()</code> with a typed <code>args</code> parameter.</p>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#pk">Entity.pk()</a> now types <code>args</code> as <code>readonly any[]</code>. Overrides that annotate it as a mutable
array still compile for now, but a future release will require <code>readonly</code>.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">User</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">value</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> parent</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> key</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">value</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string string" style="color:rgb(195, 232, 141)">-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">args</span><span class="token template-string interpolation operator" style="color:rgb(137, 221, 255)">?.</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token template-string interpolation number" style="color:rgb(247, 140, 108)">0</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token template-string interpolation operator" style="color:rgb(137, 221, 255)">?.</span><span class="token template-string interpolation">org</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">User</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">value</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> parent</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> key</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">readonly</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">value</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string string" style="color:rgb(195, 232, 141)">-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">args</span><span class="token template-string interpolation operator" style="color:rgb(137, 221, 255)">?.</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token template-string interpolation number" style="color:rgb(247, 140, 108)">0</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token template-string interpolation operator" style="color:rgb(137, 221, 255)">?.</span><span class="token template-string interpolation">org</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="future-create-data-client">Vue createDataClient()<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#future-create-data-client" class="hash-link" aria-label="Link direto para Vue createDataClient()" title="Link direto para Vue createDataClient()" translate="no">​</a></h4>
<p>Skip this if you install the store with <code>app.use(DataClientPlugin)</code>.</p>
<p><code>createDataClient()</code> and <code>ProvidedDataClient</code> are internal to <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin">DataClientPlugin</a> and will
stop being exported. Install the plugin instead, and read the controller with
<a class="" href="https://dataclient.io/pt-BR/vue/api/useController">useController()</a>. <a href="https://github.com/reactive/data-client/pull/4193" target="_blank" rel="noopener noreferrer" class="">#4193</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> createDataClient </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/vue'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> controller </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">createDataClient</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> managers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> initialState </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> DataClientPlugin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> useController </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/vue'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">use</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">DataClientPlugin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> managers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> initialState </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// in a component's setup()</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useController</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="future-wait-for-next-update">Vue renderDataCompose() waitForNextUpdate()<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#future-wait-for-next-update" class="hash-link" aria-label="Link direto para Vue renderDataCompose() waitForNextUpdate()" title="Link direto para Vue renderDataCompose() waitForNextUpdate()" translate="no">​</a></h4>
<p>Skip this if your Vue tests don't call <code>waitForNextUpdate()</code>.</p>
<p><code>waitForNextUpdate()</code> from <a class="" href="https://dataclient.io/pt-BR/vue/guides/unit-testing-composables#renderdatacompose-api">renderDataCompose()</a> gives up
silently after 1 second, so a test can pass while the composable is still suspended. It will be removed. <code>await</code> the
result instead, and call <code>allSettled()</code> after changing props or calling the controller; it now also waits for the
fetch a prop change starts. <a href="https://github.com/reactive/data-client/pull/4221" target="_blank" rel="noopener noreferrer" class="">#4221</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> result</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> waitForNextUpdate </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">renderDataCompose</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">props</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function" style="color:rgb(130, 170, 255)">useSuspense</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">ArticleResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> props</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> props</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> resolverFixtures </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">waitForNextUpdate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> article </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> result</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">props</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">6</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">waitForNextUpdate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> result</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> allSettled </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">renderDataCompose</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">props</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function" style="color:rgb(130, 170, 255)">useSuspense</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">ArticleResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> props</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> props</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> resolverFixtures </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> article </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> result</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">props</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">6</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">allSettled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrade-support">Upgrade support<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#upgrade-support" class="hash-link" aria-label="Link direto para Upgrade support" title="Link direto para Upgrade support" translate="no">​</a></h3>
<p>As usual, if you have any troubles or questions, feel free to join our <a href="https://discord.gg/wXGV27xm6t" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://img.shields.io/discord/768254430381735967.svg?style=flat-square&amp;colorB=758ED3" alt="Chat" class="img_SS3x"></a> or <a href="https://github.com/reactive/data-client/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">file a bug</a></p>]]></content>
        <author>
            <name>Nathaniel Tucker</name>
            <uri>https://github.com/ntucker</uri>
        </author>
        <category label="Versões" term="Versões"/>
        <category label="Agentes de IA" term="Agentes de IA"/>
        <category label="Managers" term="Managers"/>
        <category label="Schemas" term="Schemas"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.18: Scalar, downloads de arquivo tipados, Collections conscientes de filtros]]></title>
        <id>https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads</id>
        <link href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads"/>
        <updated>2026-05-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Campos de entidade dependentes de lente com Scalar, downloads de arquivo tipados via content do RestEndpoint, tratamento automático de binários e nonFilterArgumentKeys em resource() para collections conscientes de ordenação]]></summary>
        <content type="html"><![CDATA[<p>A v0.18 foca em uma modelagem de dados mais rica para valores que variam conforme o contexto da requisição, downloads tipados mais simples e uma correspondência de collections que reflete melhor os filtros reais das APIs.</p>
<p><strong>Novos recursos:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#scalar">Schema Scalar</a> - Campos de entidade dependentes de lente (por exemplo, valores específicos de um portfólio) sem jamais mutar a entidade subjacente</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#content-property">Propriedade <code>content</code> do RestEndpoint</a> - Downloads de arquivo tipados, respostas em texto e streaming com uma única propriedade</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#non-filter-argument-keys"><code>nonFilterArgumentKeys</code> em resource()</a> - Argumentos de ordenação/paginação não fragmentam suas <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collections</a></li>
</ul>
<p><strong>Outras melhorias:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#binary-auto-detection">Detecção automática de Content-Type binário</a> - Imagens, PDFs e outras respostas binárias são tratadas automaticamente, sem nenhuma configuração (<a href="https://github.com/reactive/data-client/pull/3868" target="_blank" rel="noopener noreferrer" class="">#3868</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Os tipos de body dos extenders de Collection seguem a semântica dos métodos HTTP</a> - Extenders PATCH (<code>.move</code>, <code>.remove</code>) aceitam bodies parciais; um <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint">RestEndpoint</a> independente deriva um body tipado do schema de entidade da <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a> (<a href="https://github.com/reactive/data-client/pull/3910" target="_blank" rel="noopener noreferrer" class="">#3910</a>)</li>
<li class="">Exporta <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection"><code>CollectionOptions</code></a> de <code>@data-client/endpoint</code> e <code>@data-client/rest</code> para a construção tipada de <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collections</a> (<a href="https://github.com/reactive/data-client/pull/3904" target="_blank" rel="noopener noreferrer" class="">#3904</a>)</li>
</ul>
<div data-playground="true" class="playgroundQueryContainer_vBqa"><div class="playgroundContainer_sLUA"><div class="playgroundTextEdit_rt2K"><div class="playgroundHeader_Zx4K fixturesHeader_kjOp small_xksL"><svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 20V4"></path><path d="m3 8 4-4 4 4"></path><path d="M17 4v16"></path><path d="m21 16-4 4-4-4"></path></svg>Fixtures</div><div class="fixtureBlock_mpRK"><div class="fixture_Arp7"><button type="button" class="clean-btn fixtureToggle_W1bY" aria-expanded="false"><span class="arrow_tivA right_vs_C" aria-hidden="true">▶</span><span class="method_pU0d">GET</span><span class="fixturePath_Tuwy">/companies</span><span class="fixtureHint_J1_b" aria-hidden="true"><span class="fixtureFn_HVDB">ƒ</span> <!-- -->→ companiesByPortfolio[portfolio] ?? []</span><span class="pill_f9VU fixtureDelay_zwlo">150 ms</span></button><div class="unfold_Z0ry" inert="" aria-hidden="true"><div class="unfoldBody_qH0e"></div></div></div><div class="fixture_Arp7"><button type="button" class="clean-btn fixtureToggle_W1bY" aria-expanded="false"><span class="arrow_tivA right_vs_C" aria-hidden="true">▶</span><span class="method_pU0d">GET</span><span class="fixturePath_Tuwy">/companies/columns</span><span class="fixtureHint_J1_b" aria-hidden="true"><span class="fixtureFn_HVDB">ƒ</span> <!-- -->→ (companiesByPortfolio[portfolio] ?? []).map(({ id, pct_equity, shares }) =&gt; ({ id, pct_equity, shares }))</span><span class="pill_f9VU fixtureDelay_zwlo">150 ms</span></button><div class="unfold_Z0ry" inert="" aria-hidden="true"><div class="unfoldBody_qH0e"></div></div></div></div><div class="playgroundHeader_Zx4K clickable_YHiX small_xksL"><span class="arrow_tivA down_oRky">▶</span>api/Company</div><div class="playgroundEditor_lYwu"><div><pre class="prism-code language-ts" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#bfc7d5;background-color:transparent" spellcheck="false"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Scalar </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Company</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  name </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  price </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  pct_equity </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  shares </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> PortfolioScalar </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Scalar</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">lens</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> args </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token operator" style="color:rgb(137, 221, 255)">?.</span><span class="token plain">portfolio</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  key</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'portfolio'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  entity</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Company</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Company</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  pct_equity</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> PortfolioScalar</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  shares</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> PortfolioScalar</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getCompanies </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/companies'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  searchParams</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> portfolio</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// `portfolio` is a lens, not a filter — the returned Company list is the same</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// regardless of lens. Dropping it from `argsKey` collapses every portfolio to</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// one Collection pk, so `Collection.queryKey()` finds the list on every</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// switch and `useSuspense` reuses it without refetching.</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Company</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">argsKey</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getPortfolioColumns </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/companies/columns'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  searchParams</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> portfolio</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">PortfolioScalar</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">argsKey</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> portfolio </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> portfolio</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> portfolio </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span>
</span></pre></div></div><div class="playgroundHeader_Zx4K clickable_YHiX small_xksL"><span class="arrow_tivA right_vs_C">▶</span>CompanyGrid</div><div class="playgroundEditor_lYwu hidden_Hh8i"></div><div class="playgroundHeader_Zx4K clickable_YHiX small_xksL"><span class="arrow_tivA right_vs_C">▶</span>PortfolioGrid</div><div class="playgroundEditor_lYwu hidden_Hh8i"></div></div><div class="previewWrapper_edd2"><div class="playgroundHeader_Zx4K previewHeader_MW_M"><span class="liveLabel_MHnJ"><span class="liveLabelText_k6qc">Pré-visualização</span></span><span class="routerSlot_CTii"></span><span class="previewControls_oxCt"><button type="button" class="clean-btn headerButton_h2KM storeHeaderToggle_ToEw" title="Mostrar o store" aria-label="Store" aria-pressed="false" data-store-toggle="true" disabled=""><svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="5" rx="8" ry="3"></ellipse><path d="M4 5v14c0 1.66 3.58 3 8 3s8-1.34 8-3V5"></path><path d="M4 12c0 1.66 3.58 3 8 3s8-1.34 8-3"></path></svg></button></span></div><div class="playgroundResult_tefG"><div class="playgroundPreview_rk9R"></div><div class="debugToggle_zlro" data-store-toggle="true">Store<span class="arrow_tivA right_vs_C vertical_OMeC">▶</span></div></div></div></div></div>
<p>O exemplo mostra as mesmas entidades <code>Company</code> renderizadas através de diferentes lentes de portfólio. Os campos estáveis da <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity">Entity</a> são reutilizados, enquanto os valores dependentes de lente são selecionados de células <a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar"><code>Scalar</code></a> separadas.</p>
<p><strong><a class="" href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#migration-guide">Mudanças incompatíveis:</a></strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#denormalize-delegate">Schema.denormalize() recebe um delegate</a> - <code>denormalize(input, args, unvisit)</code> → <code>denormalize(input, delegate)</code>. Afeta apenas implementações personalizadas de <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple">Schema</a>.</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#normalize-delegate">Schema.normalize() recebe um delegate</a> - <code>normalize(input, parent, key, args, visit, delegate)</code> → <code>normalize(input, parent, key, delegate)</code>. Afeta apenas implementações personalizadas de <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple">Schema</a>.</li>
</ul>
<p><strong>Usa um agente de IA?</strong> Instale a skill de migração — ela executa o codemod, registra
<a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple"><code>argsKey</code></a> para schemas dependentes de args e trata os casos que o codemod
não consegue (campos de classe, atribuição dinâmica de métodos, blocos <code>&lt;script&gt;</code> de SFC, helpers personalizados):</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs tabs_qwsy"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">Skills CLI</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">OpenSkills</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx skills </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> reactive/data-client </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--skill</span><span class="token plain"> data-client-v0.18-migration</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx openskills </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> reactive/data-client/.agents/skills/data-client-v0.18-migration</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div></div></div>
<p>Caso contrário, execute o <a href="https://dataclient.io/pt-BR/assets/files/v0.18-57a9e93e47ddbc37fc4ab436a1aa882b.js" target="_blank" class="">codemod</a> diretamente — ele cobre os casos comuns:</p>
<div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx jscodeshift </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">-t</span><span class="token plain"> https://dataclient.io/codemods/v0.18.js </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--extensions</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">ts,tsx,js,jsx src/</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="scalar">Scalar<a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#scalar" class="hash-link" aria-label="Link direto para Scalar" title="Link direto para Scalar" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar">Scalar</a> trata campos de <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity">Entity</a> cujos valores dependem de uma "lente" em tempo de execução — como o
portfólio, a moeda ou o locale selecionado. Vários componentes podem renderizar a <strong>mesma</strong> entidade através de
lentes diferentes simultaneamente, cada um vendo os valores corretos, enquanto a entidade em si nunca
muda. Os valores dependentes de lente vivem em uma tabela de células separada e são unidos no momento da desnormalização
a partir dos args do endpoint.</p>
<p>As referências a <code>name</code> e <code>price</code> permanecem estáveis ao trocar de portfólio porque a entidade <code>Company</code>
em si nunca muda — apenas a célula <a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar"><code>Scalar</code></a> selecionada pela lente atual. Uma única instância de <a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar"><code>Scalar</code></a>
pode servir tanto como campo de <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#schema"><code>Entity.schema</code></a> (entidade pai inferida a partir da visita) quanto
de forma independente dentro de <a class="" href="https://dataclient.io/pt-BR/rest/api/Values"><code>Values</code></a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Array"><code>[Scalar]</code></a>
ou <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection"><code>Collection([Scalar])</code></a> para atualizações baratas somente de colunas (entidade vinculada
explicitamente via <a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar#entity"><code>entity</code></a>). Os pks das células são derivados da chave do mapa ou via
<a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar#entityPk"><code>Scalar.entityPk()</code></a>, que por padrão usa <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#pk"><code>Entity.pk()</code></a>, de modo que chaves primárias personalizadas e
compostas funcionam sem precisar sobrescrever nada.</p>
<p>A store normalizada mantém a entidade estável e as células de lente separadas:</p>
<div class="language-text codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-text codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">entities['Company']['1'] = {</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id: '1',</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  price: 145.20,</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  pct_equity: ['1', 'pct_equity', 'Company'],</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  shares: ['1', 'shares', 'Company'],</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">}</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">entities['Scalar(portfolio)']['Company|1|A'] = { pct_equity: 0.50, shares: 10000 }</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">entities['Scalar(portfolio)']['Company|1|B'] = { pct_equity: 0.30, shares: 6000 }</span><br></div></code></pre></div></div>
<p>A demonstração combina <code>getCompanies</code> com uma atualização barata somente de lente, <code>getPortfolioColumns</code>, que escreve
na mesma tabela de células — veja a <a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar">documentação de Scalar</a> para um passo a passo completo
do comportamento de cache.</p>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar"><code>Scalar</code></a> também implementa <a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar#queryKey">queryKey</a>, então participa diretamente de
<a class="" href="https://dataclient.io/pt-BR/docs/api/useQuery">useQuery</a>, <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#get">Controller.get</a> e <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">schema.Query</a> —
toda a superfície <a class="" href="https://dataclient.io/pt-BR/rest/api/schema#queryable">Queryable</a> — enumerando suas células para a lente atual.</p>
<p><a href="https://github.com/reactive/data-client/pull/3887" target="_blank" rel="noopener noreferrer" class="">#3887</a> - <a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar">Documentação de Scalar</a></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="content-property">Propriedade <code>content</code> do RestEndpoint<a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#content-property" class="hash-link" aria-label="Link direto para content-property" title="Link direto para content-property" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint">RestEndpoint</a> agora aceita uma propriedade <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#content"><code>content</code></a> que controla
como o corpo da resposta é interpretado. O tipo de retorno é inferido automaticamente a partir do valor, e <code>schema</code> fica
restrito a <code>undefined</code> no nível de tipos para tipos de conteúdo que não sejam JSON.</p>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> RestEndpoint </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> downloadFile </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/files/:id/download'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  content</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'blob'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  dataExpiryLength</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Return type is Blob — inferred from content, no explicit generics needed</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> blob</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Blob </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">downloadFile</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'123'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Antes, downloads de arquivo exigiam uma sobrescrita verbosa de <code>parseResponse</code>. Agora é uma única propriedade.</p>
<div class="table-scroll"><table><thead><tr><th>Valor</th><th>Interpreta via</th><th>Tipo de retorno</th></tr></thead><tbody><tr><td><code>'json'</code></td><td><code>response.json()</code></td><td><code>any</code></td></tr><tr><td><code>'blob'</code></td><td><code>response.blob()</code></td><td><code>Blob</code></td></tr><tr><td><code>'text'</code></td><td><code>response.text()</code></td><td><code>string</code></td></tr><tr><td><code>'arrayBuffer'</code></td><td><code>response.arrayBuffer()</code></td><td><code>ArrayBuffer</code></td></tr><tr><td><code>'stream'</code></td><td><code>response.body</code></td><td><code>ReadableStream&lt;Uint8Array&gt;</code></td></tr></tbody></table></div>
<p>Definir <code>content</code> com um valor que não seja JSON impõe <code>schema: undefined</code> no nível de tipos, já que dados binários não podem ser
normalizados. Uma verificação em tempo de execução fornece uma mensagem de erro clara caso um schema normalizável seja usado por acidente.</p>
<p>Funciona com <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#extend"><code>extend()</code></a> e com <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#inheritance">subclasses</a>:</p>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Extend a JSON endpoint into a blob downloader</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> download </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> jsonEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">extend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  content</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'blob'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Subclass for a reusable blob endpoint type</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token class-name keyword" style="color:rgb(255, 203, 107);font-style:italic">class</span><span class="token plain"> BlobEndpoint</span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token constant" style="color:rgb(130, 170, 255)">O</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestGenerics</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name constant" style="color:rgb(130, 170, 255)">O</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  content </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'blob'</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<p><a href="https://github.com/reactive/data-client/pull/3868" target="_blank" rel="noopener noreferrer" class="">#3868</a> - <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#content">Documentação de <code>content</code></a></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="non-filter-argument-keys"><code>nonFilterArgumentKeys</code> em resource()<a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#non-filter-argument-keys" class="hash-link" aria-label="Link direto para non-filter-argument-keys" title="Link direto para non-filter-argument-keys" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Collection#nonFilterArgumentKeys"><code>nonFilterArgumentKeys</code></a> permite que <a class="" href="https://dataclient.io/pt-BR/rest/api/resource">resource()</a>
declare quais chaves de argumento <em>não</em> são usadas para filtrar os resultados da collection — tipicamente opções de ordenação,
paginação ou exibição. Sem isso, cada combinação distinta de args de ordenação ou página criaria um bucket separado de
<a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a>, e itens recém-criados não apareceriam em listas com
args de ordenação diferentes, mesmo que os dados subjacentes devessem corresponder.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> resource </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Post</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  title </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  group </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  author </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> PostResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">resource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/:group/posts/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  searchParams</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> orderBy</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> author</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  nonFilterArgumentKeys</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(195, 232, 141)">'orderBy'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Agora <code>group</code> e <code>author</code> são chaves de filtro (elas separam <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collections</a> em buckets distintos), mas <code>orderBy</code> é
compartilhado — <code>PostResource.getList.push()</code> adiciona o novo post a <em>todas</em> as variantes de <code>orderBy</code> de um dado
bucket <code>{ group, author }</code>.</p>
<p>Aceita um <code>string[]</code>, um <code>RegExp</code> ou uma função predicado:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">nonFilterArgumentKeys</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token regex regex-delimiter">/</span><span class="token regex regex-source language-regex anchor function" style="color:rgb(130, 170, 255)">^</span><span class="token regex regex-source language-regex group punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token regex regex-source language-regex">orderBy</span><span class="token regex regex-source language-regex alternation keyword" style="font-style:italic">|</span><span class="token regex regex-source language-regex">page</span><span class="token regex regex-source language-regex alternation keyword" style="font-style:italic">|</span><span class="token regex regex-source language-regex">cursor</span><span class="token regex regex-source language-regex group punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token regex regex-source language-regex anchor function" style="color:rgb(130, 170, 255)">$</span><span class="token regex regex-delimiter">/</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><br></div></code></pre></div></div>
<p><a href="https://github.com/reactive/data-client/pull/3914" target="_blank" rel="noopener noreferrer" class="">#3914</a> - <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection#nonFilterArgumentKeys">Documentação de <code>nonFilterArgumentKeys</code></a></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="binary-auto-detection">Detecção automática de Content-Type binário<a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#binary-auto-detection" class="hash-link" aria-label="Link direto para Detecção automática de Content-Type binário" title="Link direto para Detecção automática de Content-Type binário" translate="no">​</a></h2>
<p>Quando <code>content</code> não está definido, <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#parseResponse"><code>parseResponse</code></a> agora detecta automaticamente Content-Types
binários e retorna <code>response.blob()</code> em vez de corromper os dados via <code>.text()</code>.</p>
<p>Tipos binários como <code>image/*</code>, <code>audio/*</code>, <code>video/*</code>, <code>font/*</code>, <code>application/octet-stream</code>, <code>application/pdf</code> e
outros agora são tratados automaticamente. Tipos textuais (<code>text/*</code>, XML, HTML, JavaScript, CSS etc.) continuam a
usar o fallback de texto existente, com mensagens de erro que levam o schema em conta.</p>
<p>Isso significa que endpoints que servem dados binários com cabeçalhos Content-Type corretos funcionam sem nenhuma configuração:</p>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/avatars/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Server responds with Content-Type: image/png</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// → automatically returns a Blob (previously corrupted via .text())</span><br></div></code></pre></div></div>
<p><a href="https://github.com/reactive/data-client/pull/3868" target="_blank" rel="noopener noreferrer" class="">#3868</a></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="migration-guide">Guia de migração<a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#migration-guide" class="hash-link" aria-label="Link direto para Guia de migração" title="Link direto para Guia de migração" translate="no">​</a></h2>
<p>Esta atualização exige atualizar todas as versões dos pacotes ao mesmo tempo.</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">NPM</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">esm.sh</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> @data-client/react@^0.18.0 @data-client/rest@^0.18.0 @data-client/endpoint@^0.18.0 @data-client/core@^0.18.0 @data-client/vue@^0.18.0 @data-client/test@^0.18.0 @data-client/img@^0.18.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">yarn</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.18.0 @data-client/rest@^0.18.0 @data-client/endpoint@^0.18.0 @data-client/core@^0.18.0 @data-client/vue@^0.18.0 @data-client/test@^0.18.0 @data-client/img@^0.18.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.18.0 @data-client/rest@^0.18.0 @data-client/endpoint@^0.18.0 @data-client/core@^0.18.0 @data-client/vue@^0.18.0 @data-client/test@^0.18.0 @data-client/img@^0.18.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="language-html codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-html codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">importmap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript string-property property">"imports"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/react"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/react@^0.18.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/rest"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/rest@^0.18.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/endpoint"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/endpoint@^0.18.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/core"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/core@^0.18.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/vue"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/vue@^0.18.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/test"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/test@^0.18.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/img"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/img@^0.18.0"</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></div></div>
<p>As mudanças incompatíveis desta versão afetam apenas <strong>implementações personalizadas de <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple">Schema</a></strong>.
Se você usa apenas <a class="" href="https://dataclient.io/pt-BR/rest/api/resource"><code>resource()</code></a> e os schemas embutidos (<a class="" href="https://dataclient.io/pt-BR/rest/api/Entity"><code>Entity</code></a>,
<a class="" href="https://dataclient.io/pt-BR/rest/api/Collection"><code>Collection</code></a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Union"><code>Union</code></a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Values"><code>Values</code></a>,
<a class="" href="https://dataclient.io/pt-BR/rest/api/Array"><code>Array</code></a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Object"><code>Object</code></a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Query"><code>Query</code></a>,
<a class="" href="https://dataclient.io/pt-BR/rest/api/Invalidate"><code>Invalidate</code></a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Lazy"><code>Lazy</code></a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar"><code>Scalar</code></a>), a atualização é direta, sem alterações.</p>
<p><strong>Tem um Schema personalizado?</strong> Se você usa um agente de IA, instale a skill de migração e deixe que ela conduza
todo o fluxo — codemod, registro de <code>argsKey</code> e limpeza manual:</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs tabs_qwsy"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">Skills CLI</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">OpenSkills</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx skills </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> reactive/data-client </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--skill</span><span class="token plain"> data-client-v0.18-migration</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx openskills </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> reactive/data-client/.agents/skills/data-client-v0.18-migration</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div></div></div>
<p>Sem um agente, execute o codemod e depois leia as seções abaixo para os casos que ele não consegue
tratar (especialmente <a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#args-dependent-output" class=""><code>argsKey</code></a> para schemas dependentes de args):</p>
<div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx jscodeshift </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">-t</span><span class="token plain"> https://dataclient.io/codemods/v0.18.js </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--extensions</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">ts,tsx,js,jsx src/</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="denormalize-delegate">Schema.denormalize() recebe um delegate<a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#denormalize-delegate" class="hash-link" aria-label="Link direto para Schema.denormalize() recebe um delegate" title="Link direto para Schema.denormalize() recebe um delegate" translate="no">​</a></h3>
<p>Pule esta seção se você não implementa classes <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple">Schema</a> personalizadas.</p>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple"><code>Schema.denormalize()</code></a> agora é <code>(input, delegate)</code> em vez da assinatura anterior de 3 parâmetros,
<code>(input, args, unvisit)</code>. O novo
<a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple"><code>IDenormalizeDelegate</code></a> expõe <code>unvisit</code>, <code>args</code> e um novo helper <code>argsKey(fn)</code>.
<a href="https://github.com/reactive/data-client/pull/3887" target="_blank" rel="noopener noreferrer" class="">#3887</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Entity </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Wrapper</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">denormalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">readonly</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">unvisit</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">s</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> v</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> value </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">unvisit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">process</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">IDenormalizeDelegate</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Wrapper</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">denormalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> delegate</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> IDenormalizeDelegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> value </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">unvisit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">process</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<p>O codemod trata métodos de classe, métodos de objeto, declarações de função, assinaturas de interface
TypeScript e chamadas de repasse <code>someSchema.denormalize(input, args, unvisit)</code>. Ele também adiciona
o import de <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple"><code>IDenormalizeDelegate</code></a> como um especificador <code>type</code> inline no seu import
<code>@data-client/*</code> existente (ou cria uma nova linha <code>import type</code> se nenhum for encontrado).</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="args-dependent-output">Saída dependente de args<a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#args-dependent-output" class="hash-link" aria-label="Link direto para Saída dependente de args" title="Link direto para Saída dependente de args" translate="no">​</a></h4>
<p>Ler <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple"><code>delegate.args</code></a> diretamente <strong>não</strong> contribui para a memoização. Se a <em>saída</em> do seu schema
depende desses args (por exemplo, uma lente), declare a dependência por meio de <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple"><code>delegate.argsKey(fn)</code></a> para que o
cache seja separado em buckets corretamente.</p>
<figure class="figure_HN5N"><figcaption class="caption_pMal">O codemod não consegue inferir essa dependência, então atualize esses schemas manualmente.</figcaption><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">LensSchema</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">denormalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> unvisit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> lens </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token operator" style="color:rgb(137, 221, 255)">?.</span><span class="token plain">portfolio</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">lookup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> lens</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">LensSchema</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">constructor</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> lens </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">lensSelector </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> lens</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// ①</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">denormalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> lens </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">argsKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">lensSelector</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// ②</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">lookup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> lens</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div><ol class="callouts_q1Zq"><li><span class="marker_TC4U">①</span><span>The function reference is the cache key, so set it once here (or at module scope). An inline arrow would miss the cache on every call.</span></li><li><span class="marker_TC4U">②</span><span><code>argsKey</code> returns <code>fn(args)</code> and records the dependency for memoization.</span></li></ol></figure>
<p>Veja <a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar">Scalar</a> para um exemplo completo.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="normalize-delegate">Schema.normalize() recebe um delegate<a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#normalize-delegate" class="hash-link" aria-label="Link direto para Schema.normalize() recebe um delegate" title="Link direto para Schema.normalize() recebe um delegate" translate="no">​</a></h3>
<p>Pule esta seção se você não implementa classes <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple">Schema</a> personalizadas.</p>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple"><code>Schema.normalize()</code></a> agora lê os args do endpoint e o visitante recursivo de
<a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple"><code>INormalizeDelegate</code></a>, seguindo o formato do novo <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple">delegate de denormalize</a>.
A assinatura anterior era <code>(input, parent, key, args, visit, delegate, parentEntity?)</code>;
a nova assinatura é <code>(input, parent, key, delegate, parentEntity?)</code>.
<a href="https://github.com/reactive/data-client/pull/3934" target="_blank" rel="noopener noreferrer" class="">#3934</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> INormalizeDelegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Visit </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Wrapper</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">normalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    parent</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    key</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">readonly</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    visit</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Visit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    delegate</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> INormalizeDelegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> normalized </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">visit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'value'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">mergeEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> parent</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> normalized</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> normalized</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> INormalizeDelegate </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Wrapper</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">normalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    parent</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    key</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    delegate</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> INormalizeDelegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> visit </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> normalized </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">visit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'value'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">mergeEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> parent</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> normalized</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> normalized</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<p>Se o seu schema aceita o argumento opcional <code>parentEntity</code>, mantenha-o como o último argumento:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">normalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> parent</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> parentEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// ...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple"><code>delegate.visit()</code></a> já carrega os mesmos args para a normalização recursiva, então
<a class="" href="https://dataclient.io/pt-BR/rest/api/schema">schemas</a> aninhados não precisam receber os args explicitamente.</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="additive-parententity-on-normalize">Aditivo: <code>parentEntity</code> em normalize<a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#additive-parententity-on-normalize" class="hash-link" aria-label="Link direto para additive-parententity-on-normalize" title="Link direto para additive-parententity-on-normalize" translate="no">​</a></h4>
<p>O callback <code>visit()</code> do <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple">delegate de normalize</a> rastreia internamente o schema do tipo entidade
mais próximo que o envolve e o repassa para <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple"><code>Schema.normalize()</code></a> como o argumento final opcional
<code>parentEntity</code>. Novos <a class="" href="https://dataclient.io/pt-BR/rest/api/schema">schemas</a> podem optar por descobrir a entidade que os contém
no momento da normalização (usado internamente por <a class="" href="https://dataclient.io/pt-BR/rest/api/Scalar">Scalar</a>).</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="collection-consolidation">Opcional: consolidar definições de Collection<a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#collection-consolidation" class="hash-link" aria-label="Link direto para Opcional: consolidar definições de Collection" title="Link direto para Opcional: consolidar definições de Collection" translate="no">​</a></h4>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Collection"><code>Collection</code></a> agora pode usar tanto <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection#argsKey"><code>argsKey</code></a> quanto
<a class="" href="https://dataclient.io/pt-BR/rest/api/Collection#nestKey"><code>nestKey</code></a> na mesma instância. Como limpeza
opcional, substitua pares de <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collections</a> de nível superior e aninhadas por uma única definição
compartilhada:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getTodos </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/todos'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  searchParams</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> userId</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">User</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> schema </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    todos</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">nestKey</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> parent </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> userId</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> parent</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> userTodos </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">//argsKey: params =&gt; ({ ...params }), - this is default, so it's not needed</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">nestKey</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> parent </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> userId</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> parent</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getTodos </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/todos'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  searchParams</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> userId</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> userTodos</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">User</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> schema </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    todos</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> userTodos</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrade-support">Suporte à atualização<a href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#upgrade-support" class="hash-link" aria-label="Link direto para Suporte à atualização" title="Link direto para Suporte à atualização" translate="no">​</a></h3>
<p>Como sempre, se você tiver qualquer problema ou dúvida, fique à vontade para entrar no nosso <a href="https://discord.gg/wXGV27xm6t" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://img.shields.io/discord/768254430381735967.svg?style=flat-square&amp;colorB=758ED3" alt="Chat" class="img_SS3x"></a> ou <a href="https://github.com/reactive/data-client/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">registrar um bug</a></p>]]></content>
        <author>
            <name>Nathaniel Tucker</name>
            <uri>https://github.com/ntucker</uri>
        </author>
        <category label="Versões" term="Versões"/>
        <category label="REST" term="REST"/>
        <category label="Schemas" term="Schemas"/>
        <category label="Endpoint" term="Endpoint"/>
        <category label="Collections" term="Collections"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.16: Busca em paralelo, Collection.move, Lazy]]></title>
        <id>https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy</id>
        <link href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy"/>
        <updated>2026-04-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Carregamento de dados em paralelo com useFetch(), Collection.move para reordenar entre listas e Lazy para desnormalização adiada de relações]]></summary>
        <content type="html"><![CDATA[<p><strong>Novos recursos:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#parallel-data-loading">Carregamento de dados em paralelo com useFetch()</a> - Busque vários endpoints de forma concorrente com <code>use(useFetch())</code>, evitando cascatas sequenciais</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#collection-move">Collection.move</a> - Mova entidades entre <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collections</a> com uma única operação</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#collection-move">Collection.moveWith()</a> - Personalize o comportamento de mover (por exemplo, inserir no início em vez de no final)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#lazy">Lazy</a> - Desnormalização adiada de relações, para desempenho e isolamento de memoização</li>
</ul>
<p><strong>Outras melhorias:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#direct-schema-imports">Imports diretos de schema</a> - Importe as classes de schema diretamente, sem o namespace <code>schema</code></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#denormalization-depth-limit">Limite de profundidade de desnormalização</a> - Evita estouro de pilha em grandes grafos bidirecionais de entidades; configurável via <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#maxEntityDepth"><code>Entity.maxEntityDepth</code></a> (<a href="https://github.com/reactive/data-client/issues/3822" target="_blank" rel="noopener noreferrer" class="">#3822</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/docs/api/DevToolsManager#controllers">DevToolsManager</a> expõe <code>globalThis.__DC_CONTROLLERS__</code> em modo de desenvolvimento para acesso programático à store a partir do <a href="https://developer.chrome.com/blog/chrome-devtools-mcp" target="_blank" rel="noopener noreferrer" class="">Chrome DevTools MCP</a> e do <a href="https://docs.expo.dev/eas/ai/mcp/" target="_blank" rel="noopener noreferrer" class="">Expo MCP</a>. Use a <a href="https://skills.sh/reactive/data-client/data-client-react" target="_blank" rel="noopener noreferrer" class="">skill data-client-react</a> para habilitar a depuração assistida por IA.</li>
<li class="">Remoção do aviso enganoso 'Uncaught Suspense' durante o SSR do Next.js</li>
<li class="">Correção do tipo <code>sideEffect: false</code> que se perdia com <code>method: 'POST'</code> em <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint">RestEndpoint</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/docs/api/renderDataHook">renderDataHook()</a> faz limpeza automática após cada teste — não são mais necessárias chamadas manuais a <code>cleanup()</code></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/docs/api/renderDataHook">renderDataHook()</a> retorna <code>cleanup()</code> e <code>allSettled()</code> por renderização, para um encerramento confiável dos testes</li>
</ul>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Collection#move">Collection.move</a> facilita mover entidades entre <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collections</a> com uma única operação:</p>
<div data-playground="true" class="playgroundQueryContainer_vBqa"><div class="playgroundContainer_sLUA row_YGZs"><div class="playgroundTextEdit_rt2K withCover_yq1Z"><div class="editorBody_JtfR"><div class="editorDocs_INVk"><div class="playgroundHeader_Zx4K noupper_WDCF tabControls_trxh"><div class="tabs_m54V" role="tablist" aria-orientation="horizontal"><div role="tab" aria-selected="false" tabindex="-1" class="tab_bTGw">TaskResource</div><div role="tab" aria-selected="true" tabindex="0" class="tab_bTGw selected_QXZk">TaskCard</div><div role="tab" aria-selected="false" tabindex="-1" class="tab_bTGw">TaskBoard</div></div></div><div class="playgroundEditor_lYwu hidden_Hh8i"></div><div class="playgroundEditor_lYwu"><div><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#bfc7d5;background-color:transparent" spellcheck="false"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> useController </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token maybe-class-name">TaskResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Task</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'./TaskResource'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">TaskCard</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> task </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> task</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token maybe-class-name">Task</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">handleMove</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token maybe-class-name">TaskResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">move</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> task</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">id</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> task</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> status</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> task</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">status</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'backlog'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'in-progress'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'backlog'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ctrl </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useController</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">className</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">listItem</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">span</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> flex</span><span class="token tag script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">1</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">task</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">span</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">button</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">handleMove</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">task</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">status</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'backlog'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'\u25bc'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'\u25b2'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span>
</span></pre></div></div><div class="playgroundEditor_lYwu hidden_Hh8i"></div></div><div class="storeHost_N0SU"></div><button type="button" class="clean-btn swap_P7aB storeBadge_yrOO" title="Mostrar o store" aria-pressed="false" data-store-toggle="true"><span aria-hidden="false"><span class="storeBadgeDot_pVWi"></span>Store</span><span aria-hidden="true"><svg class="storeBadgeCode_DfYa" viewBox="0 0 24 24" width="1.15em" height="1.15em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m8 7-5 5 5 5M16 7l5 5-5 5M14 4l-4 16"></path></svg>Código</span></button></div></div><div class="previewWrapper_edd2"><div class="playgroundHeader_Zx4K previewHeader_MW_M"><span class="liveLabel_MHnJ"><span class="liveLabelText_k6qc">Pré-visualização</span></span><span class="routerSlot_CTii"></span><span class="previewControls_oxCt"><button type="button" class="clean-btn headerButton_h2KM fixturesToggle_OTR0" title="Fixtures" aria-label="Fixtures" aria-expanded="false" aria-controls="_R_85qllq9_"><svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 20V4"></path><path d="m3 8 4-4 4 4"></path><path d="M17 4v16"></path><path d="m21 16-4 4-4-4"></path></svg></button><button type="button" class="clean-btn headerButton_h2KM storeHeaderToggle_ToEw" title="Mostrar o store" aria-label="Store" aria-pressed="false" data-store-toggle="true" disabled=""><svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="5" rx="8" ry="3"></ellipse><path d="M4 5v14c0 1.66 3.58 3 8 3s8-1.34 8-3V5"></path><path d="M4 12c0 1.66 3.58 3 8 3s8-1.34 8-3"></path></svg></button></span></div><div class="fixturesAnchor_fieO"><div id="_R_85qllq9_" class="fixturesPopover_bQwj"><div class="fixtureBlock_mpRK"><div class="fixture_Arp7"><button type="button" class="clean-btn fixtureToggle_W1bY" aria-expanded="false"><span class="arrow_tivA right_vs_C" aria-hidden="true">▶</span><span class="method_pU0d">PATCH</span><span class="fixturePath_Tuwy">/tasks/:id</span><span class="fixtureHint_J1_b" aria-hidden="true"><span class="fixtureFn_HVDB">ƒ</span> <!-- -->→ this.tasks[id] || { id, ...body }</span><span class="pill_f9VU fixtureDelay_zwlo">500 ms</span></button><div class="unfold_Z0ry" inert="" aria-hidden="true"><div class="unfoldBody_qH0e"></div></div></div><div class="fixture_Arp7"><button type="button" class="clean-btn fixtureToggle_W1bY" aria-expanded="false"><span class="arrow_tivA right_vs_C" aria-hidden="true">▶</span><span class="method_pU0d">GET</span><span class="fixturePath_Tuwy">/tasks</span><span class="fixtureHint_J1_b" aria-hidden="true"><span class="fixtureFn_HVDB">ƒ</span> <!-- -->→ Object.values(this.tasks).filter(t =&gt; t.status === status)</span><span class="pill_f9VU fixtureDelay_zwlo">150 ms</span></button><div class="unfold_Z0ry" inert="" aria-hidden="true"><div class="unfoldBody_qH0e"></div></div></div></div></div></div><div class="playgroundResult_tefG"><div class="playgroundPreview_rk9R"></div></div></div></div></div>
<p><strong><a class="" href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#migration-guide">Mudanças incompatíveis:</a></strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#path-to-regexp-v8">path-to-regexp v8</a> - Sintaxe de <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#path">RestEndpoint.path</a> atualizada: <code>/:optional?</code> → <code>{/:optional}</code>, <code>/:repeat+</code> → <code>/*repeat</code> (tipado como <code>string[]</code>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#usefetch-returns-usablepromise">useFetch() retorna UsablePromise</a> - Retorna um thenable para <code>React.use()</code>; verifique <code>.resolved</code> em vez da truthiness</li>
</ul>
<p>Atualize com um <a href="https://dataclient.io/pt-BR/assets/files/v0.16-62bb6d4126ec50f0bac24e3be101bd26.js" target="_blank" class="">codemod</a> automatizado para todas as mudanças incompatíveis:</p>
<div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx jscodeshift </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">-t</span><span class="token plain"> https://dataclient.io/codemods/v0.16.js </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--extensions</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">ts,tsx,js,jsx src/</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div>
<!-- -->
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="collection-move">Collection.move<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#collection-move" class="hash-link" aria-label="Link direto para Collection.move" title="Link direto para Collection.move" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Collection#move">Collection.move</a> e <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#move">RestEndpoint.move</a> facilitam mover entidades entre collections com uma única requisição PATCH. A entidade é removida automaticamente das collections que correspondem ao seu estado antigo e adicionada às collections que correspondem aos novos valores do corpo da requisição.</p>
<p>Isso é útil para quadros kanban, reatribuição de grupos, mudanças de status ou qualquer fluxo em que um item se move entre listas filtradas.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> TaskResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">resource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/tasks/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  searchParams</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> status</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Task</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// PATCH /tasks/3 - moves task from 'backlog' to 'in-progress'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  TaskResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">move</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'3'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'3'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> status</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'in-progress'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Funciona tanto com parâmetros de caminho quanto com parâmetros de busca, e suporta collections de Array e Values.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="collectionmovewith">Collection.moveWith()<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#collectionmovewith" class="hash-link" aria-label="Link direto para Collection.moveWith()" title="Link direto para Collection.moveWith()" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Collection#moveWith">Collection.moveWith()</a> constrói um schema de mover personalizado, análogo a <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection#addWith">addWith()</a>. A função <code>merge</code> controla como as entidades são adicionadas à collection de destino (por exemplo, inserindo no início em vez de no final), enquanto o comportamento de remoção é derivado automaticamente. A função de merge <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection#unshift-merge"><code>unshift</code></a> é fornecida por conveniência.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> unshift </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyCollection</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Collection</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">constructor</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">super</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">move </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">moveWith</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">unshift</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="parallel-data-loading">Carregamento de dados em paralelo<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#parallel-data-loading" class="hash-link" aria-label="Link direto para Carregamento de dados em paralelo" title="Link direto para Carregamento de dados em paralelo" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/docs/api/useFetch">useFetch()</a> agora retorna um thenable <a href="https://react.dev/reference/react/use" target="_blank" rel="noopener noreferrer" class="">UsablePromise</a>,
tornando <code>use(useFetch(endpoint, args))</code> um substituto direto de <a class="" href="https://dataclient.io/pt-BR/docs/api/useSuspense">useSuspense()</a> —
ele suspende enquanto os dados carregam, retorna os dados desnormalizados quando estão em cache, lança em caso de erro
e suspende novamente após uma <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#invalidate">invalidação</a>.</p>
<p>Como <code>useFetch()</code> e <code>use()</code> são chamadas separadas, várias buscas começam em paralelo.
Todas as chamadas a <code>useFetch()</code> executam antes que qualquer <code>use()</code> suspenda, então toda busca já está em andamento
mesmo que o primeiro <code>use()</code> suspenda o componente.
Isso evita a cascata sequencial que ocorre com várias chamadas a <code>useSuspense()</code>,
em que a segunda busca não pode começar até que a primeira seja resolvida.
<a href="https://github.com/reactive/data-client/pull/3755" target="_blank" rel="noopener noreferrer" class="">#3755</a></p>
<div data-playground="true" class="playgroundQueryContainer_vBqa"><div class="playgroundContainer_sLUA row_YGZs"><div class="playgroundTextEdit_rt2K withCover_yq1Z"><div class="editorBody_JtfR"><div class="editorDocs_INVk"><div class="playgroundHeader_Zx4K noupper_WDCF tabControls_trxh"><div class="tabs_m54V" role="tablist" aria-orientation="horizontal"><div role="tab" aria-selected="false" tabindex="-1" class="tab_bTGw">Resources</div><div role="tab" aria-selected="true" tabindex="0" class="tab_bTGw selected_QXZk">PostWithComments</div></div></div><div class="playgroundEditor_lYwu hidden_Hh8i"></div><div class="playgroundEditor_lYwu"><div><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#bfc7d5;background-color:transparent" spellcheck="false"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> use </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> useFetch </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">PostResource</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">CommentResource</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'./Resources'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">PostWithComments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Both fetches start in parallel</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> postPromise </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useFetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">PostResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> commentsPromise </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useFetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">CommentResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> postId</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// use() reads the results — if the first suspends,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// the second fetch is already in-flight</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> post </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">use</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">postPromise</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> comments </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">use</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">commentsPromise</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">article</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">h3</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">h3</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">body</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">h4</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Comments</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">h4</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">comments</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">map</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">comment </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">key</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">comment</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(255, 85, 114)">id</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">className</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">listItem</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">comment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">author</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">comment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">text</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">article</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">render</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">PostWithComments</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">id</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">1</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span>
</span></pre></div></div></div><div class="storeHost_N0SU"></div><button type="button" class="clean-btn swap_P7aB storeBadge_yrOO" title="Mostrar o store" aria-pressed="false" data-store-toggle="true"><span aria-hidden="false"><span class="storeBadgeDot_pVWi"></span>Store</span><span aria-hidden="true"><svg class="storeBadgeCode_DfYa" viewBox="0 0 24 24" width="1.15em" height="1.15em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m8 7-5 5 5 5M16 7l5 5-5 5M14 4l-4 16"></path></svg>Código</span></button></div></div><div class="previewWrapper_edd2"><div class="playgroundHeader_Zx4K previewHeader_MW_M"><span class="liveLabel_MHnJ"><span class="liveLabelText_k6qc">Pré-visualização</span></span><span class="routerSlot_CTii"></span><span class="previewControls_oxCt"><button type="button" class="clean-btn headerButton_h2KM fixturesToggle_OTR0" title="Fixtures" aria-label="Fixtures" aria-expanded="false" aria-controls="_R_8mqllq9_"><svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 20V4"></path><path d="m3 8 4-4 4 4"></path><path d="M17 4v16"></path><path d="m21 16-4 4-4-4"></path></svg></button><button type="button" class="clean-btn headerButton_h2KM storeHeaderToggle_ToEw" title="Mostrar o store" aria-label="Store" aria-pressed="false" data-store-toggle="true" disabled=""><svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="5" rx="8" ry="3"></ellipse><path d="M4 5v14c0 1.66 3.58 3 8 3s8-1.34 8-3V5"></path><path d="M4 12c0 1.66 3.58 3 8 3s8-1.34 8-3"></path></svg></button></span></div><div class="fixturesAnchor_fieO"><div id="_R_8mqllq9_" class="fixturesPopover_bQwj"><div class="fixtureBlock_mpRK"><div class="fixture_Arp7"><button type="button" class="clean-btn fixtureToggle_W1bY" aria-expanded="false"><span class="arrow_tivA right_vs_C" aria-hidden="true">▶</span><span class="method_pU0d">GET</span><span class="fixturePath_Tuwy">/posts/1</span><span class="fixtureHint_J1_b" aria-hidden="true">{"id":1,"title":"Parallel Data Loading in React","body":"With useFetch() and React.use(), multiple fetches start at the same time — no sequential waterfalls."}</span><span class="pill_f9VU fixtureDelay_zwlo">600 ms</span></button><div class="unfold_Z0ry" inert="" aria-hidden="true"><div class="unfoldBody_qH0e"></div></div></div><div class="fixture_Arp7"><button type="button" class="clean-btn fixtureToggle_W1bY" aria-expanded="false"><span class="arrow_tivA right_vs_C" aria-hidden="true">▶</span><span class="method_pU0d">GET</span><span class="fixturePath_Tuwy">/comments?postId=1</span><span class="fixtureHint_J1_b" aria-hidden="true">[{"id":1,"postId":1,"author":"Alice","text":"This pattern is so much faster!"},{"id":2,"postId":1,"author":"Bob","text":"No more request waterfalls 🎉"},{"id":3</span><span class="pill_f9VU fixtureDelay_zwlo">600 ms</span></button><div class="unfold_Z0ry" inert="" aria-hidden="true"><div class="unfoldBody_qH0e"></div></div></div></div></div></div><div class="playgroundResult_tefG"><div class="playgroundPreview_rk9R"></div></div></div></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="denormalization-depth-limit--lazy">Limite de profundidade de desnormalização e Lazy<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#denormalization-depth-limit--lazy" class="hash-link" aria-label="Link direto para Limite de profundidade de desnormalização e Lazy" title="Link direto para Limite de profundidade de desnormalização e Lazy" translate="no">​</a></h2>
<p>Quando os schemas têm relações bidirecionais entre tipos de entidade
(por exemplo, <code>Department → Building → Department → ...</code>), a desnormalização percorre cada
entidade única do grafo conectado. Com conjuntos de dados pequenos isso passa despercebido, mas em escala — milhares
de entidades interconectadas — a recursão excede a pilha de chamadas do JS e lança
<code>RangeError: Maximum call stack size exceeded</code>.
<a href="https://github.com/reactive/data-client/issues/3822" target="_blank" rel="noopener noreferrer" class="">#3822</a></p>
<p>Dois recursos complementares resolvem isso: um <strong>limite de profundidade</strong> como rede de segurança e
<a class="" href="https://dataclient.io/pt-BR/rest/api/Lazy"><strong>Lazy</strong></a> para controle preciso, campo a campo, de quais relações são resolvidas de forma antecipada.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="denormalization-depth-limit">Limite de profundidade de desnormalização<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#denormalization-depth-limit" class="hash-link" aria-label="Link direto para Limite de profundidade de desnormalização" title="Link direto para Limite de profundidade de desnormalização" translate="no">​</a></h3>
<p>A desnormalização agora impõe um limite de profundidade padrão de 64 saltos entre entidades. Entidades além
do limite são retornadas com ids não resolvidos em vez de objetos totalmente desnormalizados.
Um <code>console.error</code> é emitido em modo de desenvolvimento quando o limite é atingido.</p>
<p>O limite pode ser configurado por Entity com <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#maxEntityDepth"><code>static maxEntityDepth</code></a>:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Department</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> maxEntityDepth </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">16</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<p>Isso evita travamentos, mas é um instrumento grosseiro — corta <em>todos</em> os caminhos profundos,
inclusive os legítimos e não cíclicos. Para um controle refinado, use <a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#lazy" class="">Lazy</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="lazy">Lazy<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#lazy" class="hash-link" aria-label="Link direto para Lazy" title="Link direto para Lazy" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Lazy">Lazy</a> envolve um schema para pular a desnormalização antecipada de campos de relação específicos.
Durante a desnormalização da entidade pai, o campo mantém seu valor normalizado bruto (chaves primárias).
A relação pode então ser resolvida sob demanda via <a class="" href="https://dataclient.io/pt-BR/docs/api/useQuery">useQuery</a> usando o acessor <code>.query</code>.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Lazy </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Department</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  name </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  buildings</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> schema </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    buildings</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Lazy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Building</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<p>Diferente do limite de profundidade, <code>Lazy</code> é uma adesão direcionada, por relação. Apenas os
campos que você marca como lazy pulam a resolução antecipada — o resto do schema é desnormalizado normalmente.
Isso também melhora o desempenho ao adiar o trabalho em relações que nem sempre são
necessárias, e oferece <strong>isolamento de memoização</strong> — mudanças em entidades lazy não invalidam
a forma desnormalizada do pai.</p>
<p>Veja a <a class="" href="https://dataclient.io/pt-BR/rest/api/Lazy">documentação de Lazy</a> para todos os detalhes de uso e
<a href="https://github.com/reactive/data-client/discussions/3828" target="_blank" rel="noopener noreferrer" class="">#3828</a> para a discussão de design.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="migration-guide">Guia de migração<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#migration-guide" class="hash-link" aria-label="Link direto para Guia de migração" title="Link direto para Guia de migração" translate="no">​</a></h2>
<p>Esta atualização exige atualizar todas as versões dos pacotes simultaneamente.</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">NPM</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">esm.sh</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> @data-client/react@^0.16.0 @data-client/rest@^0.16.0 @data-client/endpoint@^0.16.0 @data-client/core@^0.16.0 @data-client/vue@^0.16.0 @data-client/test@^0.16.0 @data-client/img@^0.16.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">yarn</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.16.0 @data-client/rest@^0.16.0 @data-client/endpoint@^0.16.0 @data-client/core@^0.16.0 @data-client/vue@^0.16.0 @data-client/test@^0.16.0 @data-client/img@^0.16.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.16.0 @data-client/rest@^0.16.0 @data-client/endpoint@^0.16.0 @data-client/core@^0.16.0 @data-client/vue@^0.16.0 @data-client/test@^0.16.0 @data-client/img@^0.16.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="language-html codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-html codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">importmap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript string-property property">"imports"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/react"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/react@^0.16.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/rest"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/rest@^0.16.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/endpoint"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/endpoint@^0.16.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/core"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/core@^0.16.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/vue"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/vue@^0.16.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/test"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/test@^0.16.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/img"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/img@^0.16.0"</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></div></div>
<p>Um <a href="https://dataclient.io/pt-BR/assets/files/v0.16-62bb6d4126ec50f0bac24e3be101bd26.js" target="_blank" class="">codemod</a> automatizado trata das três mudanças incompatíveis abaixo — sintaxe de caminho, truthiness de <code>useFetch()</code> e imports do namespace <code>schema</code>:</p>
<div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx jscodeshift </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">-t</span><span class="token plain"> https://dataclient.io/codemods/v0.16.js </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--extensions</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">ts,tsx,js,jsx src/</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="path-to-regexp-v8">path-to-regexp v8<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#path-to-regexp-v8" class="hash-link" aria-label="Link direto para path-to-regexp v8" title="Link direto para path-to-regexp v8" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#path">RestEndpoint.path</a> agora usa o <a href="https://github.com/pillarjs/path-to-regexp/releases/tag/v8.0.0" target="_blank" rel="noopener noreferrer" class="">path-to-regexp v8</a>,
que muda a sintaxe de parâmetros opcionais, parâmetros repetidos e caracteres especiais.</p>
<div class="table-scroll"><table><thead><tr><th>Sintaxe v6</th><th>Sintaxe v8</th><th>Descrição</th></tr></thead><tbody><tr><td><code>/:optional?</code></td><td><code>{/:optional}</code></td><td>Parâmetro opcional</td></tr><tr><td><code>/:repeat+</code></td><td><code>/*repeat</code></td><td>Repetição de um ou mais (tipado como <code>string[]</code>)</td></tr><tr><td><code>/:repeat*</code></td><td><code>{/*repeat}</code></td><td>Repetição de zero ou mais (tipado como <code>string[]</code>)</td></tr><tr><td><code>/:with-dash</code></td><td><code>/:"with-dash"</code></td><td>Nome de parâmetro entre aspas</td></tr><tr><td><code>/:id(\d+)</code></td><td><code>/:id</code></td><td>Regex personalizada removida</td></tr></tbody></table></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="optional-parameters">Parâmetros opcionais<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#optional-parameters" class="hash-link" aria-label="Link direto para Parâmetros opcionais" title="Link direto para Parâmetros opcionais" translate="no">​</a></h3>
<p>O sufixo <code>?</code> foi removido. Envolva o segmento opcional (incluindo seu prefixo) em <code>{}</code>.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/:group/things/:number?'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/:group/things{/:number}'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p>Vários segmentos opcionais com prefixos diferentes:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/:attr1?{-:attr2}?{-:attr3}?'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'{/:attr1}{-:attr2}{-:attr3}'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="repeating-parameters">Parâmetros repetidos<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#repeating-parameters" class="hash-link" aria-label="Link direto para Parâmetros repetidos" title="Link direto para Parâmetros repetidos" translate="no">​</a></h3>
<p>Os sufixos <code>+</code> (um ou mais) e <code>*</code> (zero ou mais) foram removidos. Use a sintaxe de curinga <code>*name</code>, envolvida em <code>{}</code> para zero ou mais.</p>
<p>Parâmetros curinga agora são tipados como <code>string[]</code> (arrays) em vez de <code>string | number</code>, já que representam vários segmentos de caminho.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/files/:path+'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">ep</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'docs/reports/q4'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> optEp </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/files/:path*'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/files/*path'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">ep</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(195, 232, 141)">'docs'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'reports'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'q4'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> optEp </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/files{/*path}'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="quoted-parameter-names">Nomes de parâmetros entre aspas<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#quoted-parameter-names" class="hash-link" aria-label="Link direto para Nomes de parâmetros entre aspas" title="Link direto para Nomes de parâmetros entre aspas" translate="no">​</a></h3>
<p>Nomes de parâmetros com caracteres especiais (hifens, pontos) agora precisam estar entre aspas duplas:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/:with-dash'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/:"with-dash"'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="custom-regex-removed">Regex personalizada removida<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#custom-regex-removed" class="hash-link" aria-label="Link direto para Regex personalizada removida" title="Link direto para Regex personalizada removida" translate="no">​</a></h3>
<p>Padrões de regex inline como <code>/:id(\d+)</code> não são mais suportados. Remova a regex — valide no servidor em vez disso.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/users/:id(\\d+)'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/users/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="escaping-special-characters">Escapando caracteres especiais<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#escaping-special-characters" class="hash-link" aria-label="Link direto para Escapando caracteres especiais" title="Link direto para Escapando caracteres especiais" translate="no">​</a></h3>
<p>Caracteres como <code>{}()[]+?!:*\\</code> precisam ser escapados com <code>\\</code> quando usados como <strong>literais</strong> no padrão de caminho.
Esses caracteres são <a href="https://github.com/pillarjs/path-to-regexp#express--4x" target="_blank" rel="noopener noreferrer" class="">reservados pelo path-to-regexp</a> e
seu uso sem escape lança um <a href="https://github.com/pillarjs/path-to-regexp#unexpected--or-" target="_blank" rel="noopener noreferrer" class="">erro Unexpected token</a>.
Uma query string literal no padrão ainda precisa de um <code>?</code> escapado, por exemplo <code>'/resource\\?per_page=50'</code>.</p>
<p>Quando os segmentos de query usam <strong>parâmetros nomeados</strong>, prefira grupos explícitos em vez de um único <code>?</code> escapado:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/search\\?q=:q'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ep </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/search?{q=:q}{&amp;page=:page}'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="finding-paths-to-migrate">Encontrando caminhos para migrar<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#finding-paths-to-migrate" class="hash-link" aria-label="Link direto para Encontrando caminhos para migrar" title="Link direto para Encontrando caminhos para migrar" translate="no">​</a></h3>
<p>Procure estes padrões nos valores de <code>path:</code> do seu código:</p>
<ul>
<li class=""><strong><code>?</code></strong> depois de um <code>:param</code> — parâmetros opcionais a converter</li>
<li class=""><strong><code>+</code></strong> ou <strong><code>*</code></strong> depois de um <code>:param</code> — parâmetros repetidos a converter</li>
<li class=""><strong><code>(\</code></strong> depois de um <code>:param</code> — regex personalizada a remover</li>
<li class="">Nomes de parâmetros com <strong><code>-</code></strong> ou <strong><code>.</code></strong> — precisam de aspas</li>
</ul>
<p>Veja <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#path">RestEndpoint.path</a> para a documentação completa da sintaxe v8,
ou os <a href="https://github.com/pillarjs/path-to-regexp#errors" target="_blank" rel="noopener noreferrer" class="">erros do path-to-regexp</a> para explicações detalhadas.
A migração assistida por IA também está disponível:</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs tabs_qwsy"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">Skills CLI</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">OpenSkills</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx skills </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> reactive/data-client </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--skill</span><span class="token plain"> path-to-regexp-v8-migration</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx openskills </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> reactive/data-client/.agents/skills/path-to-regexp-v8-migration</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="usefetch-returns-usablepromise">useFetch() retorna UsablePromise<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#usefetch-returns-usablepromise" class="hash-link" aria-label="Link direto para useFetch() retorna UsablePromise" title="Link direto para useFetch() retorna UsablePromise" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/docs/api/useFetch">useFetch()</a> agora retorna um thenable <code>UsablePromise</code> com dados desnormalizados, tratamento de erros e uma propriedade <code>.resolved</code>. Isso o torna diretamente compatível com <a href="https://react.dev/reference/react/use" target="_blank" rel="noopener noreferrer" class="">React.use()</a> — <code>use(useFetch(endpoint, args))</code> se comporta de forma idêntica a <a class="" href="https://dataclient.io/pt-BR/docs/api/useSuspense">useSuspense()</a>.</p>
<p>Antes, <code>useFetch()</code> retornava <code>undefined</code> quando os dados eram válidos. Código que verificava se houve uma busca pela truthiness agora precisa usar <code>.resolved</code>:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> promise </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useFetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">PostResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">promise</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// fetch was triggered</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> promise </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useFetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">PostResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">promise</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">resolved</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// fetch is in-flight</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">use</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">promise</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// suspends or returns denormalized data</span><br></div></code></pre></div></div></div></figure>
<p>Veja <a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#parallel-data-loading" class="">Carregamento de dados em paralelo</a> acima para saber como isso habilita buscas concorrentes que evitam cascatas sequenciais.
<a href="https://github.com/reactive/data-client/pull/3752" target="_blank" rel="noopener noreferrer" class="">#3752</a>, <a href="https://github.com/reactive/data-client/pull/3755" target="_blank" rel="noopener noreferrer" class="">#3755</a></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="direct-schema-imports">Imports diretos de schema<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#direct-schema-imports" class="hash-link" aria-label="Link direto para Imports diretos de schema" title="Link direto para Imports diretos de schema" translate="no">​</a></h2>
<p>As classes de schema agora podem ser importadas diretamente de <a href="https://www.npmjs.com/package/@data-client/endpoint" target="_blank" rel="noopener noreferrer" class="">@data-client/endpoint</a> (ou de <a href="https://www.npmjs.com/package/@data-client/rest" target="_blank" rel="noopener noreferrer" class="">@data-client/rest</a>, que as reexporta), sem exigir o namespace <code>schema</code>. Isso oferece uma sintaxe de import mais limpa, mantendo total compatibilidade retroativa.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> schema </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/endpoint'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> myUnion </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Union</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> users</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> groups</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Group </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token string" style="color:rgb(195, 232, 141)">'type'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Union </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/endpoint'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> myUnion </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Union</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> users</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> groups</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Group </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token string" style="color:rgb(195, 232, 141)">'type'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p>Todas as classes de schema estão disponíveis como exports diretos: <a class="" href="https://dataclient.io/pt-BR/rest/api/Union">Union</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Invalidate">Invalidate</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Values">Values</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/All">All</a> e <a class="" href="https://dataclient.io/pt-BR/rest/api/Lazy">Lazy</a>. O export do namespace <code>schema</code> continua disponível por compatibilidade retroativa.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrade-support">Suporte à atualização<a href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#upgrade-support" class="hash-link" aria-label="Link direto para Suporte à atualização" title="Link direto para Suporte à atualização" translate="no">​</a></h3>
<p>Como sempre, se tiver qualquer problema ou dúvida, fique à vontade para entrar no nosso <a href="https://discord.gg/wXGV27xm6t" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://img.shields.io/discord/768254430381735967.svg?style=flat-square&amp;colorB=758ED3" alt="Chat" class="img_SS3x"></a> ou <a href="https://github.com/reactive/data-client/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">registrar um bug</a></p>]]></content>
        <author>
            <name>Nathaniel Tucker</name>
            <uri>https://github.com/ntucker</uri>
        </author>
        <category label="Versões" term="Versões"/>
        <category label="REST" term="REST"/>
        <category label="Schemas" term="Schemas"/>
        <category label="Collections" term="Collections"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.15: Vue 3, Collection.remove, atualização do useDebounce]]></title>
        <id>https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove</id>
        <link href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove"/>
        <updated>2026-01-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Composables para Vue 3, Collection.remove para gerenciamento eficiente de listas, consultas a Union aprimoradas e ganhos de desempenho]]></summary>
        <content type="html"><![CDATA[<p><strong>Novas plataformas:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#vue-3-support">Vue 3</a> com composables completos: useSuspense, useCache, useDLE, useController, useQuery</li>
</ul>
<p><strong>Novos recursos:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#collectionremove">Collection.remove</a> para remover itens de collections</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#restendpointremove">RestEndpoint.remove</a> para combinar PATCH com remoção da collection</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#union-queries">Unions podem fazer query() sem o discriminador de tipo</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#invalidate-unions">Invalidate dá suporte a Unions</a> para operações de exclusão polimórficas</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#mockinitialstate">mockInitialState()</a> para uma configuração de testes mais simples</li>
</ul>
<p><strong>Desempenho:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#performance">Melhoria de 10 a 20%</a> nas operações de get/denormalize</li>
</ul>
<p><strong><a class="" href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#migration-guide">Mudanças incompatíveis:</a></strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#usedebounce">useDebounce() retorna [val, isPending]</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#immutablejs">Suporte a ImmutableJS movido para os exports /imm</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#schema-delegate">Consolidação da interface de delegate dos Schemas</a></li>
</ul>
<p>Atualize com um <a href="https://dataclient.io/pt-BR/assets/files/v0.15-a09ab84c5309f63d14af1950930d3ba3.js" target="_blank" class="">codemod</a> automatizado para as mudanças incompatíveis mais comuns:</p>
<div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx jscodeshift </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">-t</span><span class="token plain"> https://dataclient.io/codemods/v0.15.js </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--extensions</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">ts,tsx,js,jsx src/</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div>
<!-- -->
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="vue-3-support">Suporte a Vue 3<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#vue-3-support" class="hash-link" aria-label="Link direto para Suporte a Vue 3" title="Link direto para Suporte a Vue 3" translate="no">​</a></h2>
<p>O novo pacote <a href="https://www.npmjs.com/package/@data-client/vue" target="_blank" rel="noopener noreferrer" class=""><code>@data-client/vue</code></a> traz todo o poder do Reactive Data Client para o Vue 3 com composables nativos. <a href="https://github.com/reactive/data-client/pull/3549" target="_blank" rel="noopener noreferrer" class="">#3549</a>, <a href="https://github.com/reactive/data-client/pull/3585" target="_blank" rel="noopener noreferrer" class="">#3585</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="installation">Instalação<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#installation" class="hash-link" aria-label="Link direto para Instalação" title="Link direto para Instalação" translate="no">​</a></h3>
<div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> @data-client/vue @data-client/rest</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="setup">Configuração<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#setup" class="hash-link" aria-label="Link direto para Configuração" title="Link direto para Configuração" translate="no">​</a></h3>
<p>Instale o <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin">DataClientPlugin</a> no seu app:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">main.ts</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> createApp </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'vue'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> DataClientPlugin </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/vue'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> app </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">createApp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">App</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">use</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">DataClientPlugin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">mount</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'#app'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="composables">Composables<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#composables" class="hash-link" aria-label="Link direto para Composables" title="Link direto para Composables" translate="no">​</a></h3>
<p>Todos os hooks já conhecidos estão disponíveis como composables do Vue:</p>
<div class="language-html codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">ArticleDetail.vue</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-html codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">setup</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">lang</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">ts</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript keyword module" style="font-style:italic">import</span><span class="token script language-javascript"> </span><span class="token script language-javascript imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript imports"> useSuspense </span><span class="token script language-javascript imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"> </span><span class="token script language-javascript keyword module" style="font-style:italic">from</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">'@data-client/vue'</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript keyword module" style="font-style:italic">import</span><span class="token script language-javascript"> </span><span class="token script language-javascript imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript imports"> </span><span class="token script language-javascript imports maybe-class-name">ArticleResource</span><span class="token script language-javascript imports"> </span><span class="token script language-javascript imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"> </span><span class="token script language-javascript keyword module" style="font-style:italic">from</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">'./resources'</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript keyword" style="font-style:italic">const</span><span class="token script language-javascript"> props </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">=</span><span class="token script language-javascript"> defineProps</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"> </span><span class="token script language-javascript literal-property property">id</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> string </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript keyword" style="font-style:italic">const</span><span class="token script language-javascript"> article </span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">=</span><span class="token script language-javascript"> </span><span class="token script language-javascript keyword control-flow" style="font-style:italic">await</span><span class="token script language-javascript"> </span><span class="token script language-javascript function" style="color:rgb(130, 170, 255)">useSuspense</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript maybe-class-name">ArticleResource</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript property-access">get</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript function" style="color:rgb(130, 170, 255)">computed</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript"> </span><span class="token script language-javascript arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"> </span><span class="token script language-javascript literal-property property">id</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> props</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token script language-javascript property-access">id</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">template</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">article</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">h1</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain">{{ article.title }}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">h1</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain">{{ article.content }}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">article</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">template</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<p>Composables disponíveis:</p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense"><code>useSuspense()</code></a> - Busca de dados integrada ao Suspense</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/vue/api/useCache"><code>useCache()</code></a> - Leitura do cache sem buscar</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/vue/api/useDLE"><code>useDLE()</code></a> - Padrão Data/Loading/Error sem Suspense <a href="https://github.com/reactive/data-client/pull/3592" target="_blank" rel="noopener noreferrer" class="">#3592</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/vue/api/useController"><code>useController()</code></a> - Acesso ao controller para mutações</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/vue/api/useQuery"><code>useQuery()</code></a> - Consultas diretas a schemas</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="testing-with-mockplugin">Testes com MockPlugin<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#testing-with-mockplugin" class="hash-link" aria-label="Link direto para Testes com MockPlugin" title="Link direto para Testes com MockPlugin" translate="no">​</a></h3>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">test setup</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> createApp </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'vue'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> DataClientPlugin </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/vue'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> MockPlugin </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/vue/test'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> app </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">createApp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">App</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">use</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">DataClientPlugin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">use</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">MockPlugin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  fixtures</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      endpoint</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> MyResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      response</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Test'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<div style="text-align:center"><a class="button button--primary" href="https://dataclient.io/pt-BR/vue/getting-started/agent-skills">Guia de primeiros passos</a></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="collectionremove">Collection.remove<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#collectionremove" class="hash-link" aria-label="Link direto para Collection.remove" title="Link direto para Collection.remove" translate="no">​</a></h2>
<p>Novo schema para remover itens de <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collections</a> sem excluir a entidade em si. <a href="https://github.com/reactive/data-client/pull/3560" target="_blank" rel="noopener noreferrer" class="">#3560</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> schema </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> TodoCollection </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> TodoResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">resource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/todos/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">extend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  getList</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> TodoCollection </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Remove from collection without deleting</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">TodoResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">remove</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'123'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Isso é útil quando um item deve ser removido de uma visualização de lista, mas continuar existindo em outros lugares:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Remove user from a specific group list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">UserResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">remove</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> userId</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> group</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'admins'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="restendpointremove">RestEndpoint.remove<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#restendpointremove" class="hash-link" aria-label="Link direto para RestEndpoint.remove" title="Link direto para RestEndpoint.remove" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#remove">RestEndpoint.remove</a> combina uma atualização PATCH com a remoção da collection - perfeito para operações de "arquivar" ou "mover". <a href="https://github.com/reactive/data-client/pull/3623" target="_blank" rel="noopener noreferrer" class="">#3623</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getTodos </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/todos'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Removes Todo from collection AND updates it with new data</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  getTodos</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">remove</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'123'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> title</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Done'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> completed</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> archived</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Move user between groups</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  UserResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">remove</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> group</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'team-a'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> username</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'bob'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> group</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'team-b'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// User removed from 'team-a' list AND entity updated with group: 'team-b'</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="union-queries">Consultas a Union<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#union-queries" class="hash-link" aria-label="Link direto para Consultas a Union" title="Link direto para Consultas a Union" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Union">Unions</a> agora podem ser consultadas sem especificar o discriminador de tipo. <a href="https://github.com/reactive/data-client/pull/3558" target="_blank" rel="noopener noreferrer" class="">#3558</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Type discriminator required</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// @ts-expect-error - missing 'type'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> event </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">EventUnion</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// event is undefined</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> newsEvent </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">EventUnion</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> type</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'news'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// newsEvent is found</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Works without type discriminator</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> event </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">EventUnion</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// event is found!</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> newsEvent </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">EventUnion</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> type</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'news'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// newsEvent is also found</span><br></div></code></pre></div></div></div></figure>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="invalidate-unions">Invalidate dá suporte a Unions<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#invalidate-unions" class="hash-link" aria-label="Link direto para Invalidate dá suporte a Unions" title="Link direto para Invalidate dá suporte a Unions" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Invalidate">schema.Invalidate</a> agora aceita schemas <a class="" href="https://dataclient.io/pt-BR/rest/api/Union">Union</a> para operações de exclusão polimórficas. Além disso, <a class="" href="https://dataclient.io/pt-BR/rest/api/resource#delete">resource().delete</a> envolve automaticamente schemas Union com Invalidate. <a href="https://github.com/reactive/data-client/pull/3559" target="_blank" rel="noopener noreferrer" class="">#3559</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> FeedUnion </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Union</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> posts</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> comments</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Comment </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token string" style="color:rgb(195, 232, 141)">'type'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// resource() automatically handles Union delete</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> FeedResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">resource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/feed/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> FeedUnion</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">FeedResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">delete</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'123'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// For standalone endpoints, use schema.Invalidate directly</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> deleteFeedItem </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/feed/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  method</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'DELETE'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Invalidate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">FeedUnion</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">deleteFeedItem</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'123'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="testing-utilities">Utilitários de teste<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#testing-utilities" class="hash-link" aria-label="Link direto para Utilitários de teste" title="Link direto para Utilitários de teste" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="mockinitialstate">mockInitialState()<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#mockinitialstate" class="hash-link" aria-label="Link direto para mockInitialState()" title="Link direto para mockInitialState()" translate="no">​</a></h3>
<p>Novo utilitário para criar um estado pré-populado em testes. <a href="https://github.com/reactive/data-client/commit/a4092a1499" target="_blank" rel="noopener noreferrer" class=""><code>a4092a1</code></a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> mockInitialState </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react/mock'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> ArticleResource </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'./resources'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> state </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">mockInitialState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    endpoint</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> ArticleResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    response</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> title</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Hello'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> content</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'World'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="data-clientcoremock">@data-client/core/mock<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#data-clientcoremock" class="hash-link" aria-label="Link direto para @data-client/core/mock" title="Link direto para @data-client/core/mock" translate="no">​</a></h3>
<p>Novo ponto de entrada de mock com utilitários para construir implementações de mock personalizadas:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  MockController</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  collapseFixture</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  createFixtureMap</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/core/mock'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<ul>
<li class=""><code>MockController</code> - Wrapper de Controller para mockar endpoints</li>
<li class=""><code>collapseFixture</code> - Resolve respostas de fixtures (trata respostas em forma de função)</li>
<li class=""><code>createFixtureMap</code> - Separa fixtures em um mapa estático e interceptors</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="performance">Desempenho<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#performance" class="hash-link" aria-label="Link direto para Desempenho" title="Link direto para Desempenho" translate="no">​</a></h2>
<p>Remover a sobrecarga da detecção automática de ImmutableJS e otimizar os caminhos de código da desnormalização proporciona uma <strong>melhoria de 10 a 20%</strong> nas operações de get/denormalize. <a href="https://github.com/reactive/data-client/pull/3421" target="_blank" rel="noopener noreferrer" class="">#3421</a>, <a href="https://github.com/reactive/data-client/pull/3468" target="_blank" rel="noopener noreferrer" class="">#3468</a></p>
<center><div style="max-width:500px"></div><p><a href="https://reactive.github.io/data-client/dev/bench/" target="_blank" rel="noopener noreferrer" class="">Benchmarks ao longo do tempo</a> | <a href="https://github.com/reactive/data-client/tree/master/examples/benchmark" target="_blank" rel="noopener noreferrer" class="">Ver benchmark</a></p></center>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="other-improvements">Outras melhorias<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#other-improvements" class="hash-link" aria-label="Link direto para Outras melhorias" title="Link direto para Outras melhorias" translate="no">​</a></h2>
<ul>
<li class="">Corrige os tipos de <code>getPage</code> quando paginationField está no body</li>
<li class="">Corrige o tratamento polimórfico de entidades invalidadas em <a class="" href="https://dataclient.io/pt-BR/rest/api/All">schema.All()</a></li>
<li class="">Corrige os tipos do argumento 'state' de <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#get">controller.get</a> e controller.getQueryMeta</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="migration-guide">Guia de migração<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#migration-guide" class="hash-link" aria-label="Link direto para Guia de migração" title="Link direto para Guia de migração" translate="no">​</a></h2>
<!-- -->
<p>Esta atualização exige atualizar todas as versões dos pacotes ao mesmo tempo.</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">NPM</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">esm.sh</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> @data-client/react@^0.15.0 @data-client/rest@^0.15.0 @data-client/test@^0.15.0 @data-client/img@^0.15.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">yarn</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.15.0 @data-client/rest@^0.15.0 @data-client/test@^0.15.0 @data-client/img@^0.15.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.15.0 @data-client/rest@^0.15.0 @data-client/test@^0.15.0 @data-client/img@^0.15.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="language-html codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-html codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">importmap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript string-property property">"imports"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/react"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/react@^0.15.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/rest"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/rest@^0.15.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/test"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/test@^0.15.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/img"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/img@^0.15.0"</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></div></div>
<p>Um <a href="https://dataclient.io/pt-BR/assets/files/v0.15-a09ab84c5309f63d14af1950930d3ba3.js" target="_blank" class="">codemod</a> automatizado trata as mudanças incompatíveis abaixo:</p>
<div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token plain">npx jscodeshift </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">-t</span><span class="token plain"> https://dataclient.io/codemods/v0.15.js </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--extensions</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">ts,tsx,js,jsx src/</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="usedebounce">useDebounce() retorna [val, isPending]<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#usedebounce" class="hash-link" aria-label="Link direto para useDebounce() retorna [val, isPending]" title="Link direto para useDebounce() retorna [val, isPending]" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/docs/api/useDebounce">useDebounce()</a> agora retorna uma tupla com o estado pendente, seguindo o padrão do <code>useTransition</code> do React 19. <a href="https://github.com/reactive/data-client/pull/3459" target="_blank" rel="noopener noreferrer" class="">#3459</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> useDebounce </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> debouncedQuery </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useDebounce</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">100</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> useDebounce </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">debouncedQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useDebounce</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">100</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Or use the pending state</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">debouncedQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> isPending</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useDebounce</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">100</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<div class="theme-admonition theme-admonition-tip admonition_WCGJ alert alert--success"><div class="admonitionHeading_GCBg"><span class="admonitionIcon_L39b"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>dica</div><div class="admonitionContent_pbrs"><p>A assinatura anterior continua disponível via <code>@data-client/react/next</code> para uma migração gradual.</p></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="immutablejs">ImmutableJS movido para os exports /imm<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#immutablejs" class="hash-link" aria-label="Link direto para ImmutableJS movido para os exports /imm" title="Link direto para ImmutableJS movido para os exports /imm" translate="no">​</a></h3>
<p>O suporte a ImmutableJS não é mais detectado automaticamente. Use os exports explícitos <code>/imm</code> para lidar com estado em ImmutableJS. <a href="https://github.com/reactive/data-client/pull/3421" target="_blank" rel="noopener noreferrer" class="">#3421</a>, <a href="https://github.com/reactive/data-client/pull/3468" target="_blank" rel="noopener noreferrer" class="">#3468</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> MemoCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> denormalize </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/normalizr'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> memo </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MemoCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Auto-detected ImmutableJS</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> MemoCache </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/normalizr'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> MemoPolicy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> denormalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> normalize </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/normalizr/imm'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> memo </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MemoCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">MemoPolicy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p>O ponto de entrada <code>/imm</code> agora inclui tanto <code>normalize()</code> quanto <code>denormalize()</code> para o tratamento completo de estado em ImmutableJS:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> normalize </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/normalizr/imm'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> fromJS </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'immutable'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> result </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">normalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Article</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> responseData</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  entities</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">fromJS</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  indexes</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">fromJS</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  entitiesMeta</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">fromJS</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// result.entities is an ImmutableJS Map</span><br></div></code></pre></div></div>
<p>Essa mudança proporciona uma melhoria de desempenho de 10 a 20% ao remover a sobrecarga da detecção de ImmutableJS para quem não o utiliza.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="schema-delegate">Mudanças na interface de delegate dos Schemas<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#schema-delegate" class="hash-link" aria-label="Link direto para Mudanças na interface de delegate dos Schemas" title="Link direto para Mudanças na interface de delegate dos Schemas" translate="no">​</a></h3>
<p>Se você tem schemas personalizados que sobrescrevem <code>normalize()</code> ou <code>queryKey()</code>, os argumentos de callback foram consolidados em um objeto <code>delegate</code>. <a href="https://github.com/reactive/data-client/pull/3449" target="_blank" rel="noopener noreferrer" class="">#3449</a></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="normalize">normalize()<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#normalize" class="hash-link" aria-label="Link direto para normalize()" title="Link direto para normalize()" translate="no">​</a></h4>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">normalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  parent</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  key</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">|</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">visit</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  addEntity</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  getEntity</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  checkLoop</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">addEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> processedEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">normalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  parent</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  key</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">|</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">visit</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  delegate</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> INormalizeDelegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">mergeEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> processedEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="querykey">queryKey()<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#querykey" class="hash-link" aria-label="Link direto para queryKey()" title="Link direto para queryKey()" translate="no">​</a></h4>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">queryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> queryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> getEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> getIndex</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">getIndex</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> indexName</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">getEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">queryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> getEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> getIndex</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">queryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> unvisit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getIndex</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> indexName</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">unvisit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="delegategetentity--delegategetentities-3501">delegate.getEntity → delegate.getEntities <a href="https://github.com/reactive/data-client/pull/3501" target="_blank" rel="noopener noreferrer" class="">#3501</a><a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#delegategetentity--delegategetentities-3501" class="hash-link" aria-label="Link direto para delegategetentity--delegategetentities-3501" title="Link direto para delegategetentity--delegategetentities-3501" translate="no">​</a></h4>
<p>Ao iterar sobre todas as entidades de um tipo, use <code>delegate.getEntities()</code>, que retorna uma interface restrita com os métodos iteradores <code>keys()</code> e <code>entries()</code>:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> entities </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  Object</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">keys</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">forEach</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">collectionPk </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token function" style="color:rgb(130, 170, 255)">filterCollections</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token constant" style="color:rgb(130, 170, 255)">JSON</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">parse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">collectionPk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">mergeEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> collectionPk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> normalizedValue</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> entities </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getEntities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> collectionKey </span><span class="token keyword" style="font-style:italic">of</span><span class="token plain"> entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">keys</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token function" style="color:rgb(130, 170, 255)">filterCollections</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token constant" style="color:rgb(130, 170, 255)">JSON</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">parse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">collectionKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">continue</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">mergeEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> collectionKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> normalizedValue</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="invalid-removed">Símbolo INVALID removido<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#invalid-removed" class="hash-link" aria-label="Link direto para Símbolo INVALID removido" title="Link direto para Símbolo INVALID removido" translate="no">​</a></h3>
<p>O símbolo <code>INVALID</code> não é mais exportado. Use os métodos do delegate em seu lugar. <a href="https://github.com/reactive/data-client/pull/3461" target="_blank" rel="noopener noreferrer" class="">#3461</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">INVALID</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/endpoint'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">normalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">setEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">INVALID</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">queryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> unvisit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">found</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">INVALID</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">normalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">invalidate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> key</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">queryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> unvisit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">found</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> delegate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token constant" style="color:rgb(130, 170, 255)">INVALID</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="entitiesmeta">state.entityMeta -&gt; state.entitiesMeta<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#entitiesmeta" class="hash-link" aria-label="Link direto para state.entityMeta -> state.entitiesMeta" title="Link direto para state.entityMeta -> state.entitiesMeta" translate="no">​</a></h3>
<p>Propriedade do estado interno renomeada por consistência. Isso afeta apenas o acesso direto à store. <a href="https://github.com/reactive/data-client/pull/3451" target="_blank" rel="noopener noreferrer" class="">#3451</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="networkmanager">Mudanças na estrutura de dados do NetworkManager<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#networkmanager" class="hash-link" aria-label="Link direto para Mudanças na estrutura de dados do NetworkManager" title="Link direto para Mudanças na estrutura de dados do NetworkManager" translate="no">​</a></h3>
<p>Os campos <code>fetched</code>, <code>rejectors</code>, <code>resolvers</code> e <code>fetchedAt</code> do <a class="" href="https://dataclient.io/pt-BR/docs/api/NetworkManager">NetworkManager</a>
foram consolidados em <code>fetching</code>. <a href="https://github.com/reactive/data-client/pull/3394" target="_blank" rel="noopener noreferrer" class="">#3394</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">fetched</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">fetching</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">has</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="memocache">Mudanças na API do MemoCache (normalizr)<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#memocache" class="hash-link" aria-label="Link direto para Mudanças na API do MemoCache (normalizr)" title="Link direto para Mudanças na API do MemoCache (normalizr)" translate="no">​</a></h3>
<p>Para quem usa <a href="https://www.npmjs.com/package/@data-client/normalizr" target="_blank" rel="noopener noreferrer" class="">@data-client/normalizr</a> diretamente:</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="memocachequery-and-buildquerykey-take-state-as-one-argument-3372">MemoCache.query() e buildQueryKey() recebem o state como um único argumento <a href="https://github.com/reactive/data-client/pull/3372" target="_blank" rel="noopener noreferrer" class="">#3372</a><a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#memocachequery-and-buildquerykey-take-state-as-one-argument-3372" class="hash-link" aria-label="Link direto para memocachequery-and-buildquerykey-take-state-as-one-argument-3372" title="Link direto para memocachequery-and-buildquerykey-take-state-as-one-argument-3372" translate="no">​</a></h4>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">memo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">buildQueryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">indexes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">memo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">indexes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">memo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">buildQueryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">memo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="memocachequery-returns--data-paths-">MemoCache.query() retorna { data, paths }<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#memocachequery-returns--data-paths-" class="hash-link" aria-label="Link direto para MemoCache.query() retorna { data, paths }" title="Link direto para MemoCache.query() retorna { data, paths }" translate="no">​</a></h4>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> data </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">memo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">typeof</span><span class="token plain"> data </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'symbol'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">data </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrade-support">Suporte à atualização<a href="https://dataclient.io/pt-BR/blog/2026/01/06/v0.15-vue-support-collection-remove#upgrade-support" class="hash-link" aria-label="Link direto para Suporte à atualização" title="Link direto para Suporte à atualização" translate="no">​</a></h3>
<p>Como sempre, se você tiver qualquer problema ou dúvida, fique à vontade para entrar no nosso <a href="https://discord.gg/wXGV27xm6t" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://img.shields.io/discord/768254430381735967.svg?style=flat-square&amp;colorB=758ED3" alt="Chat" class="img_SS3x"></a> ou <a href="https://github.com/reactive/data-client/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">registrar um bug</a></p>]]></content>
        <author>
            <name>Nathaniel Tucker</name>
            <uri>https://github.com/ntucker</uri>
        </author>
        <category label="Versões" term="Versões"/>
        <category label="Vue" term="Vue"/>
        <category label="Schemas" term="Schemas"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.14: APIs de Manager simplificadas, desempenho e GC]]></title>
        <id>https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement</id>
        <link href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement"/>
        <updated>2024-07-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Busca de dados mais rápida, bundles 30% menores, coleta de lixo automática e APIs de Manager mais limpas]]></summary>
        <content type="html"><![CDATA[<p><strong>Managers:</strong></p>
<p>As APIs de Manager foram simplificadas — formatos de action mais planos reduzem a complexidade do código e melhoram o desempenho ao minimizar entradas distintas de cache inline, enquanto APIs de configuração mais simples tornam a personalização mais agradável.</p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#action-shapes">Formatos de action simplificados</a></li>
<li class="">Propriedade <a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#manager-middleware">Manager.middleware</a></li>
<li class="">Configuração de <a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#getdefaultmanagers">getDefaultManagers()</a></li>
</ul>
<p><strong>Desempenho:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#immediate-fetching">Chamadas de fetch imediatas</a> - sem mais esperar pelo idle</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#bundle-size">Bundles 30% menores</a> ao remover polyfills desnecessários</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#normalization-performance">Normalização 10% mais rápida, desnormalização 32% mais rápida</a></li>
</ul>
<p><strong>Schema/modelagem de dados:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#query-joins">Joins com Query</a> usando schemas de Object</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#entitymixin">EntityMixin</a> para compor o comportamento de Entity</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#entity-pk-default">Padrão de Entity.pk()</a> usa <code>id</code></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#dynamic-invalidation">Invalidação dinâmica</a> via Entity.process()</li>
</ul>
<p><strong>Testes:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#renderdatahook">renderDataHook()</a> para testes mais simples</li>
</ul>
<p><strong>Coleta de lixo:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#gcpolicy">GCPolicy</a> - coleta de lixo automática de dados desatualizados</li>
</ul>
<p><strong><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#migration-guide">Mudanças incompatíveis:</a></strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#networkmanager">NetworkManager busca imediatamente</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#action-response">action.payload -&gt; action.response</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#action-args">action.meta.args -&gt; action.args</a></li>
</ul>
<!-- -->
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="managers">Managers<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#managers" class="hash-link" aria-label="Link direto para Managers" title="Link direto para Managers" translate="no">​</a></h2>
<p>As APIs de Manager foram simplificadas — formatos de action mais planos reduzem a complexidade do código e melhoram o desempenho ao minimizar entradas distintas de cache inline, enquanto APIs de configuração mais simples tornam a personalização mais agradável.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="action-shapes">Formatos de action<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#action-shapes" class="hash-link" aria-label="Link direto para Formatos de action" title="Link direto para Formatos de action" translate="no">​</a></h3>
<p>Os formatos de action estão mais simples e mais consistentes. <a href="https://github.com/reactive/data-client/pull/3143" target="_blank" rel="noopener noreferrer" class="">#3143</a>, <a href="https://github.com/reactive/data-client/pull/3139" target="_blank" rel="noopener noreferrer" class="">#3139</a></p>
<ul>
<li class=""><code>action.meta.args</code> -&gt; <code>action.args</code></li>
<li class=""><code>action.meta.key</code> -&gt; <code>action.key</code></li>
<li class=""><code>action.meta.nm</code> removido (não era usado)</li>
<li class=""><code>action.payload</code> -&gt; <code>action.response</code> (para SET_RESPONSE)</li>
</ul>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-json codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-json codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"type"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"rdc/setresponse"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"meta"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"key"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"PATCH https://jsonplaceholder.typicode.com/todos/1"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"payload"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"userId"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"id"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"title"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"delectus aut autem"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"completed"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"args"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token property">"id"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token property">"completed"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"nm"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"endpoint"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"name"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"Todo.partialUpdate"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"schema"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token property">"key"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"Todo"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token property">"schema"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"sideEffect"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"fetchedAt"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"12:44:24.206 PM"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"date"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"12:44:24.334 PM"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"expiresAt"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"1:44:24.334 PM"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"error"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-json codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-json codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"type"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"rdc/setresponse"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"key"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"PATCH https://jsonplaceholder.typicode.com/todos/1"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"response"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"userId"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"id"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"title"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"delectus aut autem"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"completed"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"args"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token property">"id"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token property">"completed"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"endpoint"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"name"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"Todo.partialUpdate"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"schema"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"key"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"Todo"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"schema"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"sideEffect"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"meta"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"fetchedAt"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"12:44:24.206 PM"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"date"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"12:44:24.334 PM"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"expiresAt"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"1:44:24.334 PM"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"error"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="manager-middleware">Manager.middleware<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#manager-middleware" class="hash-link" aria-label="Link direto para Manager.middleware" title="Link direto para Manager.middleware" translate="no">​</a></h3>
<p>Managers agora podem usar uma propriedade <code>middleware</code> em vez do método <code>getMiddleware()</code>. <a href="https://github.com/reactive/data-client/pull/3164" target="_blank" rel="noopener noreferrer" class="">#3164</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  getMiddleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Middleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// handle action</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  middleware</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">Middleware</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// handle action</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<div class="theme-admonition theme-admonition-tip admonition_WCGJ alert alert--success"><div class="admonitionHeading_GCBg"><span class="admonitionIcon_L39b"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>dica</div><div class="admonitionContent_pbrs"><p><code>getMiddleware()</code> continua funcionando por compatibilidade retroativa.</p></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="actiontypes-without-_type-suffix">actionTypes sem o sufixo _TYPE<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#actiontypes-without-_type-suffix" class="hash-link" aria-label="Link direto para actionTypes sem o sufixo _TYPE" title="Link direto para actionTypes sem o sufixo _TYPE" translate="no">​</a></h3>
<p>Nomes de tipos de action mais limpos agora estão disponíveis (não é uma mudança incompatível - também mantemos os nomes antigos). <a href="https://github.com/reactive/data-client/pull/3244" target="_blank" rel="noopener noreferrer" class="">#3244</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Manager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Middleware </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> actionTypes </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">LoggingManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  middleware</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">Middleware</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> actionTypes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token constant" style="color:rgb(130, 170, 255)">SET_RESPONSE_TYPE</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">info</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">          </span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">action</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">endpoint</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string string" style="color:rgb(195, 232, 141)"> </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation constant" style="color:rgb(130, 170, 255)">JSON</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation function" style="color:rgb(130, 170, 255)">stringify</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string interpolation">action</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">response</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">default</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Manager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Middleware </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> actionTypes </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">LoggingManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  middleware</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">Middleware</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> actionTypes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token constant" style="color:rgb(130, 170, 255)">SET_RESPONSE</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">info</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">          </span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">action</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">endpoint</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string string" style="color:rgb(195, 232, 141)"> </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation constant" style="color:rgb(130, 170, 255)">JSON</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation function" style="color:rgb(130, 170, 255)">stringify</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string interpolation">action</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">response</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">default</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="getdefaultmanagers">getDefaultManagers()<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#getdefaultmanagers" class="hash-link" aria-label="Link direto para getDefaultManagers()" title="Link direto para getDefaultManagers()" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/docs/api/getDefaultManagers">getDefaultManagers()</a> agora aceita opções de configuração. <a href="https://github.com/reactive/data-client/pull/3161" target="_blank" rel="noopener noreferrer" class="">#3161</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> getDefaultManagers </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Remove DevToolsManager</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> managers </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getDefaultManagers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> devToolsManager</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">null</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Configure DevToolsManager</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> managers </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getDefaultManagers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  devToolsManager</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    latency</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1000</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">predicate</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">type </span><span class="token operator" style="color:rgb(137, 221, 255)">!==</span><span class="token plain"> actionTypes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token constant" style="color:rgb(130, 170, 255)">SET_RESPONSE</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Use custom NetworkManager</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> managers </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getDefaultManagers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  networkManager</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">IdlingNetworkManager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="networkmanager-constructor">Construtor do NetworkManager<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#networkmanager-constructor" class="hash-link" aria-label="Link direto para Construtor do NetworkManager" title="Link direto para Construtor do NetworkManager" translate="no">​</a></h3>
<p>O construtor do <a class="" href="https://dataclient.io/pt-BR/docs/api/NetworkManager">NetworkManager</a> agora usa argumentos nomeados para maior clareza.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">NetworkManager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">42</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">7</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">NetworkManager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> dataExpiryLength</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">42</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> errorExpiryLength</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">7</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="performance">Desempenho<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#performance" class="hash-link" aria-label="Link direto para Desempenho" title="Link direto para Desempenho" translate="no">​</a></h2>
<p>O modo concorrente e o batching automático do React 18+ mudam como devemos otimizar. Esperar por callbacks de idle já não é o ideal — buscar imediatamente agora traz resultados melhores. Mudanças internas aproveitam closures e estruturas de dados <code>Map</code> para normalização e consultas mais rápidas, enquanto a remoção de dependências infladas de polyfill reduz significativamente os bundles.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="immediate-fetching">Busca imediata<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#immediate-fetching" class="hash-link" aria-label="Link direto para Busca imediata" title="Link direto para Busca imediata" translate="no">​</a></h3>
<p>O <a class="" href="https://dataclient.io/pt-BR/docs/api/NetworkManager">NetworkManager</a> agora busca imediatamente em vez de esperar por callbacks de idle. <a href="https://github.com/reactive/data-client/pull/3146" target="_blank" rel="noopener noreferrer" class="">#3146</a></p>
<p>Isso resulta em carregamento de dados mais rápido, especialmente em aplicações com árvores de renderização complexas.</p>
<p>O <code>IdlingNetworkManager</code> continua disponível para quem preferir o comportamento anterior:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> IdlingNetworkManager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> getDefaultManagers </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> managers </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getDefaultManagers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  networkManager</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">IdlingNetworkManager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="bundle-size">Tamanho do bundle<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#bundle-size" class="hash-link" aria-label="Link direto para Tamanho do bundle" title="Link direto para Tamanho do bundle" translate="no">​</a></h3>
<p>Os pacotes agora são <strong>30% menores</strong> após a remoção de pacotes inflados de polyfill. <a href="https://github.com/reactive/data-client/pull/3384" target="_blank" rel="noopener noreferrer" class="">#3384</a></p>
<p>Além disso, os polyfills não poluem mais o escopo global. <a href="https://github.com/reactive/data-client/pull/3353" target="_blank" rel="noopener noreferrer" class="">#3353</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="normalization-performance">Desempenho da normalização<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#normalization-performance" class="hash-link" aria-label="Link direto para Desempenho da normalização" title="Link direto para Desempenho da normalização" translate="no">​</a></h3>
<p>Mudanças internas na interface de schema trazem um <strong>ganho de 10% no desempenho da normalização</strong>. <a href="https://github.com/reactive/data-client/pull/3134" target="_blank" rel="noopener noreferrer" class="">#3134</a></p>
<p>Usar <code>Map</code> em vez de objetos simples para armazenar entidades oferece <strong>consultas até 32% mais rápidas</strong> em grandes conjuntos de dados. <a href="https://github.com/reactive/data-client/pull/3390" target="_blank" rel="noopener noreferrer" class="">#3390</a></p>
<center><div style="max-width:500px"></div><p><a href="https://reactive.github.io/data-client/dev/bench/" target="_blank" rel="noopener noreferrer" class="">Benchmarks ao longo do tempo</a> | <a href="https://github.com/reactive/data-client/tree/master/examples/benchmark" target="_blank" rel="noopener noreferrer" class="">Ver benchmark</a></p></center>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="schemadata-modeling">Schema/modelagem de dados<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#schemadata-modeling" class="hash-link" aria-label="Link direto para Schema/modelagem de dados" title="Link direto para Schema/modelagem de dados" translate="no">​</a></h2>
<p>As APIs de schema reduzem o código boilerplate em padrões comuns e, ao mesmo tempo, habilitam casos de uso mais avançados. Joins no lado do cliente agora funcionam entre entidades arbitrárias (não apenas relações aninhadas), a invalidação dinâmica lida com lógica de exclusão que só existe no servidor, e padrões sensatos como <code>Entity.pk()</code> usando <code>id</code> eliminam código repetitivo.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="query-joins">Joins com Query<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#query-joins" class="hash-link" aria-label="Link direto para Joins com Query" title="Link direto para Joins com Query" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a> agora pode receber <a class="" href="https://dataclient.io/pt-BR/rest/api/Object">schemas de Object</a>, permitindo joins entre vários tipos de entidade. <a href="https://github.com/reactive/data-client/pull/3165" target="_blank" rel="noopener noreferrer" class="">#3165</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Ticker</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  product_id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  price </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">product_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Stats</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  product_id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  last </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">product_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Join Ticker and Stats by product_id</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> queryPrice </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> ticker</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Ticker</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> stats</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Stats </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> ticker</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> stats </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> ticker</span><span class="token operator" style="color:rgb(137, 221, 255)">?.</span><span class="token plain">price </span><span class="token operator" style="color:rgb(137, 221, 255)">??</span><span class="token plain"> stats</span><span class="token operator" style="color:rgb(137, 221, 255)">?.</span><span class="token plain">last</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Use in components</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> price </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">queryPrice</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> product_id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'BTC-USD'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="entitymixin">EntityMixin<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#entitymixin" class="hash-link" aria-label="Link direto para EntityMixin" title="Link direto para EntityMixin" translate="no">​</a></h3>
<p>Novo <a class="" href="https://dataclient.io/pt-BR/rest/api/EntityMixin">EntityMixin</a> para compor o comportamento de Entity com classes existentes. <a href="https://github.com/reactive/data-client/pull/3243" target="_blank" rel="noopener noreferrer" class="">#3243</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> EntityMixin </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Your existing class</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token class-name keyword" style="color:rgb(255, 203, 107);font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Article</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  title </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  content </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  tags</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Add Entity behavior</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">ArticleEntity</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">EntityMixin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Article</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="entity-pk-default">Padrão de Entity.pk()<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#entity-pk-default" class="hash-link" aria-label="Link direto para Padrão de Entity.pk()" title="Link direto para Padrão de Entity.pk()" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#pk">Entity.pk()</a> agora usa <code>this.id</code> por padrão. <a href="https://github.com/reactive/data-client/pull/3188" target="_blank" rel="noopener noreferrer" class="">#3188</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Todo</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  title </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  completed </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Todo</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  title </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  completed </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="dynamic-invalidation">Invalidação dinâmica<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#dynamic-invalidation" class="hash-link" aria-label="Link direto para Invalidação dinâmica" title="Link direto para Invalidação dinâmica" translate="no">​</a></h3>
<p>Retorne <code>undefined</code> de <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#process">Entity.process()</a> para <a class="" href="https://dataclient.io/pt-BR/docs/concepts/expiry-policy#invalidate-entity">invalidar</a> entidades dinamicamente com base nos dados da resposta. <a href="https://github.com/reactive/data-client/pull/3407" target="_blank" rel="noopener noreferrer" class="">#3407</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">PriceLevel</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  price </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  amount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation keyword" style="font-style:italic">this</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">price</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">process</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> parent</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> key</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">|</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">price</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> amount</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Invalidate when amount is 0</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">amount </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> price</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> amount </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="resource">resource()<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#resource" class="hash-link" aria-label="Link direto para resource()" title="Link direto para resource()" translate="no">​</a></h3>
<p><code>createResource()</code> foi renomeado para <code>resource()</code> por brevidade. <a href="https://github.com/reactive/data-client/pull/3158" target="_blank" rel="noopener noreferrer" class="">#3158</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> createResource </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> TodoResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">createResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/todos/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> resource </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> TodoResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">resource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/todos/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<div class="theme-admonition theme-admonition-note admonition_WCGJ alert alert--secondary"><div class="admonitionHeading_GCBg"><span class="admonitionIcon_L39b"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>observação</div><div class="admonitionContent_pbrs"><p><code>createResource</code> continua exportado por compatibilidade retroativa.</p></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="testing">Testes<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#testing" class="hash-link" aria-label="Link direto para Testes" title="Link direto para Testes" translate="no">​</a></h2>
<p>Testar deve ser simples. Novos helpers usam padrões sensatos para eliminar o código boilerplate em cenários de teste comuns.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="renderdatahook">renderDataHook()<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#renderdatahook" class="hash-link" aria-label="Link direto para renderDataHook()" title="Link direto para renderDataHook()" translate="no">​</a></h3>
<p>O novo <a class="" href="https://dataclient.io/pt-BR/docs/api/renderDataHook">renderDataHook()</a> usa o <a class="" href="https://dataclient.io/pt-BR/docs/api/DataProvider">DataProvider</a> padrão, eliminando código boilerplate. <a href="https://github.com/reactive/data-client/pull/3238" target="_blank" rel="noopener noreferrer" class="">#3238</a></p>
<p>Além disso, <code>makeRenderDataClient()</code> foi renomeado para <a class="" href="https://dataclient.io/pt-BR/docs/api/makeRenderDataHook">makeRenderDataHook()</a> por consistência (o nome antigo continua funcionando).</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> renderDataHook </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/test'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> result </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">renderDataHook</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useSuspense</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">ArticleResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    initialFixtures</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        endpoint</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> ArticleResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        response</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> title</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Test'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="garbage-collection">Coleta de lixo<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#garbage-collection" class="hash-link" aria-label="Link direto para Coleta de lixo" title="Link direto para Coleta de lixo" translate="no">​</a></h2>
<p>Aplicações de longa duração acumulam dados desatualizados na memória. Novas políticas de coleta de lixo limpam automaticamente entradas expiradas, usando contagem de referências para rastrear quais dados estão ativamente vinculados a componentes.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="gcpolicy">GCPolicy<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#gcpolicy" class="hash-link" aria-label="Link direto para GCPolicy" title="Link direto para GCPolicy" translate="no">​</a></h3>
<p>GCPolicy habilita a coleta de lixo automática de dados desatualizados. <a href="https://github.com/reactive/data-client/pull/3343" target="_blank" rel="noopener noreferrer" class="">#3343</a></p>
<div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">GCPolicy</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">DataProvider</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Run GC sweep every 10 minutes</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">DataProvider</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">gcPolicy</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript keyword" style="color:rgb(255, 85, 114);font-style:italic">new</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript class-name" style="color:rgb(255, 203, 107)">GCPolicy</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> intervalMS</span><span class="token tag script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">60</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript operator" style="color:rgb(137, 221, 255)">*</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">1000</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript operator" style="color:rgb(137, 221, 255)">*</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">10</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">children</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">DataProvider</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<p>Configure o comportamento de expiração:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">GCPolicy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  intervalMS</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">60</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">*</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1000</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">*</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// How often to run GC</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  expiryMultiplier</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">        </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// How many stale lifetimes before GC</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div>
<p>Use <code>ImmortalGCPolicy</code> para desabilitar a coleta de lixo (comportamento padrão anterior):</p>
<div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ImmortalGCPolicy</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">DataProvider</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">DataProvider</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">gcPolicy</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript keyword" style="color:rgb(255, 85, 114);font-style:italic">new</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)"> </span><span class="token tag script language-javascript class-name" style="color:rgb(255, 203, 107)">ImmortalGCPolicy</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">children</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">DataProvider</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="other-improvements">Outras melhorias<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#other-improvements" class="hash-link" aria-label="Link direto para Outras melhorias" title="Link direto para Outras melhorias" translate="no">​</a></h2>
<ul>
<li class="">Collections funcionam com schemas polimórficos como Union <a href="https://github.com/reactive/data-client/pull/3151" target="_blank" rel="noopener noreferrer" class="">#3151</a></li>
<li class="">Collections funcionam com args aninhados (compatibilidade com a biblioteca qs) <a href="https://github.com/reactive/data-client/pull/3281" target="_blank" rel="noopener noreferrer" class="">#3281</a></li>
<li class="">Interceptors funcionam em actions despachadas por managers <a href="https://github.com/reactive/data-client/pull/3365" target="_blank" rel="noopener noreferrer" class="">#3365</a></li>
<li class="">Mensagens de NetworkError incluem a URL para facilitar a depuração</li>
<li class="">React Native: <code>InteractionManager.runAfterInteractions</code> para reduzir quedas de frames <a href="https://github.com/reactive/data-client/pull/3127" target="_blank" rel="noopener noreferrer" class="">#3127</a></li>
<li class="">React Native: entrada <code>react-native</code> nos exports do package.json <a href="https://github.com/reactive/data-client/pull/3371" target="_blank" rel="noopener noreferrer" class="">#3371</a></li>
<li class="">Compatibilidade aprimorada com React 19 <a href="https://github.com/reactive/data-client/pull/3279" target="_blank" rel="noopener noreferrer" class="">#3279</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="migration-guide">Guia de migração<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#migration-guide" class="hash-link" aria-label="Link direto para Guia de migração" title="Link direto para Guia de migração" translate="no">​</a></h2>
<!-- -->
<p>Esta atualização exige atualizar todas as versões dos pacotes simultaneamente.</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">NPM</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">esm.sh</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> @data-client/react@^0.14.0 @data-client/rest@^0.14.0 @data-client/test@^0.14.0 @data-client/img@^0.14.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">yarn</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.14.0 @data-client/rest@^0.14.0 @data-client/test@^0.14.0 @data-client/img@^0.14.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.14.0 @data-client/rest@^0.14.0 @data-client/test@^0.14.0 @data-client/img@^0.14.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="language-html codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-html codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">importmap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript string-property property">"imports"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/react"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/react@^0.14.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/rest"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/rest@^0.14.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/test"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/test@^0.14.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/img"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/img@^0.14.0"</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="for-all-users">Para todos os usuários<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#for-all-users" class="hash-link" aria-label="Link direto para Para todos os usuários" title="Link direto para Para todos os usuários" translate="no">​</a></h3>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="networkmanager">NetworkManager busca imediatamente<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#networkmanager" class="hash-link" aria-label="Link direto para NetworkManager busca imediatamente" title="Link direto para NetworkManager busca imediatamente" translate="no">​</a></h4>
<p>O <a class="" href="https://dataclient.io/pt-BR/docs/api/NetworkManager">NetworkManager</a> agora busca imediatamente em vez de esperar pelo idle. Isso melhora o desempenho com React 18+. <a href="https://github.com/reactive/data-client/pull/3146" target="_blank" rel="noopener noreferrer" class="">#3146</a></p>
<p>Para manter o comportamento anterior, use <code>IdlingNetworkManager</code>:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> IdlingNetworkManager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> getDefaultManagers </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> managers </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getDefaultManagers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  networkManager</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">IdlingNetworkManager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="custom-managers">Para autores de Managers personalizados<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#custom-managers" class="hash-link" aria-label="Link direto para Para autores de Managers personalizados" title="Link direto para Para autores de Managers personalizados" translate="no">​</a></h3>
<p>Pule esta seção se você não tem <a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers">Managers</a> personalizados.</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="action-response">action.payload -&gt; action.response<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#action-response" class="hash-link" aria-label="Link direto para action.payload -> action.response" title="Link direto para action.payload -> action.response" translate="no">​</a></h4>
<p>Para <a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers">Managers</a> personalizados que tratam <a class="" href="https://dataclient.io/pt-BR/docs/api/Actions#set_response">SET_RESPONSE</a>: <a href="https://github.com/reactive/data-client/pull/3141" target="_blank" rel="noopener noreferrer" class="">#3141</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token constant" style="color:rgb(130, 170, 255)">SET_RESPONSE_TYPE</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Middleware</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  getMiddleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Middleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">SET_RESPONSE_TYPE</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'Resolved with value'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">payload</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">default</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token constant" style="color:rgb(130, 170, 255)">SET_RESPONSE_TYPE</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Middleware</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  getMiddleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Middleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">SET_RESPONSE_TYPE</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'Resolved with value'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">response</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">default</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="fetch-payload">fetchAction.payload removido<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#fetch-payload" class="hash-link" aria-label="Link direto para fetchAction.payload removido" title="Link direto para fetchAction.payload removido" translate="no">​</a></h4>
<p>Para <a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers">Managers</a> personalizados que tratam <a class="" href="https://dataclient.io/pt-BR/docs/api/Actions#fetch">FETCH</a>: <a href="https://github.com/reactive/data-client/pull/3141" target="_blank" rel="noopener noreferrer" class="">#3141</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token constant" style="color:rgb(130, 170, 255)">FETCH_TYPE</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Middleware</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  getMiddleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Middleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">FETCH_TYPE</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// consume fetch, and print the resolution</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">payload</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">then</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">response </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">response</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">default</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token constant" style="color:rgb(130, 170, 255)">FETCH_TYPE</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Middleware</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  getMiddleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Middleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">FETCH_TYPE</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// consume fetch, and print the resolution</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        action</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">endpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">then</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">response </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">response</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">default</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="action-args">action.meta.args -&gt; action.args<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#action-args" class="hash-link" aria-label="Link direto para action.meta.args -> action.args" title="Link direto para action.meta.args -> action.args" translate="no">​</a></h4>
<p>Os argumentos da action saíram de <code>meta</code> e foram para o nível superior. <a href="https://github.com/reactive/data-client/pull/3143" target="_blank" rel="noopener noreferrer" class="">#3143</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> key </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">meta</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> key </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="custom-schemas">Para autores de Schemas personalizados<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#custom-schemas" class="hash-link" aria-label="Link direto para Para autores de Schemas personalizados" title="Link direto para Para autores de Schemas personalizados" translate="no">​</a></h3>
<p>Pule esta seção se você não tem schemas personalizados que implementam <code>normalize()</code> ou <code>denormalize()</code>.</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="schema-interface">Mudanças na interface de Schema<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#schema-interface" class="hash-link" aria-label="Link direto para Mudanças na interface de Schema" title="Link direto para Mudanças na interface de Schema" translate="no">​</a></h4>
<p>As interfaces de <code>normalize()</code> e <code>denormalize()</code> mudaram. <a href="https://github.com/reactive/data-client/pull/3134" target="_blank" rel="noopener noreferrer" class="">#3134</a></p>
<p>Isso traz um ganho de 10% no desempenho para todos os usuários.</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="schemanormalize-visit">Schema.normalize visit()<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#schemanormalize-visit" class="hash-link" aria-label="Link direto para Schema.normalize visit()" title="Link direto para Schema.normalize visit()" translate="no">​</a></h4>
<p>A interface de <code>visit()</code> agora remove os argumentos não contextuais:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token doc-comment comment" style="color:rgb(105, 112, 152);font-style:italic">/** Visits next data + schema while recurisvely normalizing */</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">interface</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Visit</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> value</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> parent</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> key</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">readonly</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  creating</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">boolean</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">processedEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">visit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  processedEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  processedEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  addEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  visitedEntities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  storeEntities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">processedEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">visit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  processedEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  processedEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p>As informações necessárias desses argumentos são fornecidas ao <a href="https://en.wikipedia.org/wiki/Closure_(computer_programming)" target="_blank" rel="noopener noreferrer" class="">fechar</a> <code>visit()</code> em torno deles.</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="schemanormalize-interface">Interface de Schema.normalize<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#schemanormalize-interface" class="hash-link" aria-label="Link direto para Interface de Schema.normalize" title="Link direto para Interface de Schema.normalize" translate="no">​</a></h4>
<p>Mudou do acesso direto aos dados para o uso de funções como <code>getEntity</code>:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">interface</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">SchemaSimple</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">normalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    parent</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    key</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">visit</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      value</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      parent</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      key</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">readonly</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">addEntity</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">getEntity</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">checkLoop</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<p>Também adicionamos <code>checkLoop()</code>, que move parte da lógica de <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity">Entity</a>
para o algoritmo central de normalização.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token doc-comment comment" style="color:rgb(105, 112, 152);font-style:italic">/** Returns true if a circular reference is found */</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">interface</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">CheckLoop</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entityKey</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> pk</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> object</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">boolean</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="schemadenormalize-unvisit">Schema.denormalize unvisit()<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#schemadenormalize-unvisit" class="hash-link" aria-label="Link direto para Schema.denormalize unvisit()" title="Link direto para Schema.denormalize unvisit()" translate="no">​</a></h4>
<p>O argumento <code>unvisit</code> agora recebe o argumento <a class="" href="https://dataclient.io/pt-BR/rest/api/schema">schema</a> primeiro:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">interface</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">SchemaSimple</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">denormalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">readonly</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">unvisit</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> input</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">T</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrade-support">Suporte à atualização<a href="https://dataclient.io/pt-BR/blog/2024/07/13/v0.14-release-announcement#upgrade-support" class="hash-link" aria-label="Link direto para Suporte à atualização" title="Link direto para Suporte à atualização" translate="no">​</a></h3>
<p>Como sempre, se tiver qualquer problema ou dúvida, fique à vontade para entrar no nosso <a href="https://discord.gg/wXGV27xm6t" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://img.shields.io/discord/768254430381735967.svg?style=flat-square&amp;colorB=758ED3" alt="Chat" class="img_SS3x"></a> ou <a href="https://github.com/reactive/data-client/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">registrar um bug</a></p>]]></content>
        <author>
            <name>Nathaniel Tucker</name>
            <uri>https://github.com/ntucker</uri>
        </author>
        <category label="Versões" term="Versões"/>
        <category label="Managers" term="Managers"/>
        <category label="Desempenho" term="Desempenho"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.13: NextJS App Router, Expo, React 19, Redux]]></title>
        <id>https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native</id>
        <link href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native"/>
        <updated>2024-06-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Suporte ao NextJS App Router e ao React 19, com melhorias de compatibilidade com React Native e Expo]]></summary>
        <content type="html"><![CDATA[<p>Plataformas:</p>
<ul>
<li class=""><a href="https://nextjs.org/docs/app" target="_blank" rel="noopener noreferrer" class="">NextJS App Router</a></li>
<li class=""><a href="https://expo.dev/" target="_blank" rel="noopener noreferrer" class="">Expo</a></li>
<li class=""><a href="https://react.dev/blog/2024/12/05/react-19" target="_blank" rel="noopener noreferrer" class="">React 19</a></li>
</ul>
<p><strong>Testes:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/docs/api/MockResolver">MockResolver</a> marcado como código 'client' para o NextJS App Router</li>
<li class="">Exporta <a class="" href="https://dataclient.io/pt-BR/docs/api/renderDataHook">renderDataHook()</a> - compatível com React 17 e 18</li>
</ul>
<p>Pacotes movidos para dentro de <a href="https://www.npmjs.com/package/@data-client/react" target="_blank" rel="noopener noreferrer" class="">@data-client/react</a>:</p>
<ul>
<li class="">Redux</li>
<li class="">Hooks</li>
</ul>
<p><strong>Outras melhorias</strong></p>
<ul>
<li class="">Adicionado <a class="" href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#controllerset">controller.set(Todo, { id }, { id, completed: false })</a></li>
<li class="">RestEndpoint.path <a class="" href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#path-strings">dá suporte a +, * e {}</a></li>
<li class="">Corrigido o <a class="" href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#ctrlfetch-and-unions">valor de retorno de controller.fetch() para Unions</a></li>
</ul>
<p><a class="" href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#migration-guide"><strong>Mudanças incompatíveis:</strong></a></p>
<ul>
<li class="">actionTypes.SET_TYPE -&gt; <a href="https://dataclient.io/docs/api/Actions#set_response" target="_blank" rel="noopener noreferrer" class="">actionTypes.SET_RESPONSE_TYPE</a></li>
<li class="">SetAction -&gt; SetResponseAction</li>
<li class="">Versão mínima do React 16.8.4 -&gt; 16.14</li>
</ul>
<div class="theme-admonition theme-admonition-note admonition_WCGJ alert alert--secondary"><div class="admonitionHeading_GCBg"><span class="admonitionIcon_L39b"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>observação</div><div class="admonitionContent_pbrs"><p>A versão 0.12 foi pulada devido a um problema na publicação.</p></div></div>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="platforms">Plataformas<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#platforms" class="hash-link" aria-label="Link direto para Plataformas" title="Link direto para Plataformas" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="nextjs-app-router">NextJS App Router<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#nextjs-app-router" class="hash-link" aria-label="Link direto para NextJS App Router" title="Link direto para NextJS App Router" translate="no">​</a></h3>
<p>O NextJS 12 inclui uma <a href="https://nextjs.org/docs/app" target="_blank" rel="noopener noreferrer" class="">nova forma de roteamento no diretório '/app'</a>. Isso permite mais melhorias de desempenho, além de roteamento dinâmico e aninhado. Isso torna o NextJS uma plataforma viável para construir aplicações ricas e dinâmicas, e não
apenas sites estáticos.</p>
<p>Enquanto <a href="https://nextjs.org/docs/app/building-your-application/data-fetching/fetching#fetching-data-on-the-client" target="_blank" rel="noopener noreferrer" class="">outros métodos de busca</a>
exigem uma busca lenta no lado do cliente, o Reactive Data Client oferece o melhor de <abbr title="Single Page Application">SPA</abbr> e
<abbr title="Multi Page Application">MPA</abbr>. <a href="https://github.com/reactive/data-client/pull/3074" target="_blank" rel="noopener noreferrer" class="">#3074</a>, <a href="https://github.com/reactive/data-client/pull/3093" target="_blank" rel="noopener noreferrer" class="">#3093</a></p>
<p>Como as MPAs, o SSR com Data Client significa o <em>carregamento inicial da página</em> mais rápido possível. Como as SPAs, o Data Client oferece
<em>navegação</em>, <em>mutações no lado do cliente</em> e <em>mutações disparadas remotamente</em> (como websockets) mais rápidas do que as MPAs.</p>
<p>Além disso, o Data Client com SSR continua oferecendo as vantagens de desempenho sobre outras bibliotecas de busca
no lado do cliente.</p>
<figure class="perfChart_LYCy"><figcaption class="text--center text--bold margin-bottom--sm">Desempenho vs busca no cliente<div class="text--normal"><small>Bar lengths use a log scale</small></div></figcaption><div class="bars_HVEW" style="--perf-one:0%"><div class="row_OlYf" aria-hidden="true"><span></span><span class="oneLabel_y_xM">1x</span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">LCP</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:17.1591950743891%;--perf-split:0%"></span></span><span class="text--bold">3x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">Client fetch<!-- --> <!-- -->1200<!-- --> <!-- -->ms<!-- --> → <!-- -->Data Client<!-- --> <strong>400<!-- --> <!-- -->ms</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">Mutation</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:100%;--perf-split:0%"></span></span><span class="text--bold">603x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">Client fetch<!-- --> <!-- -->1810<!-- --> <!-- -->ms<!-- --> → <!-- -->Data Client<!-- --> <strong>3<!-- --> <!-- -->ms</strong></span></span></div><div class="anchor_tRSI row_OlYf" tabindex="0"><span class="label_dFrN">List to detail navigation</span><span class="track_Wj4m" aria-hidden="true"><span class="bar_eNox" style="width:29.79992018679698%;--perf-split:0%"></span></span><span class="text--bold">6.7x</span><span class="tip_L8pU tip_kDq8"><span class="bubble_XBbb">Client fetch<!-- --> <!-- -->310<!-- --> <!-- -->ms<!-- --> → <!-- -->Data Client<!-- --> <strong>46<!-- --> <!-- -->ms</strong></span></span></div></div></figure>
<center><video width="600" controls="" muted="" playsinline="" loop="" aria-label="Um app de tarefas em NextJS carregando em uma janela anônima nova: a lista de usuários e as tarefas renderizadas no servidor ficam interativas imediatamente, tarefas são marcadas e adicionadas, e trocar de usuário atualiza a lista, tudo sem buscas no lado do cliente."><source src="/pt-BR/videos/blog/data-client-nextjs.mp4" type="video/mp4">Um app de tarefas em NextJS carregando em uma janela anônima nova: a lista de usuários e as tarefas renderizadas no servidor ficam interativas imediatamente, tarefas são marcadas e adicionadas, e trocar de usuário atualiza a lista, tudo sem buscas no lado do cliente.</video></center>
<p>O <abbr title="Reactive Data Client">Data Client</abbr> realiza SSR em streaming do HTML, agilizando a experiência de carregamento
inicial da aplicação. De forma única, o <abbr title="Reactive Data Client">Data Client</abbr> fica então imediatamente interativo
com 0 buscas no lado do cliente. Isso é alcançado inicializando a <a class="" href="https://dataclient.io/pt-BR/docs/getting-started/debugging#state-inspection">store do cliente</a>
com <a class="" href="https://dataclient.io/pt-BR/docs/concepts/normalization">dados normalizados</a> durante a fase de SSR.</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="usage">Uso<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#usage" class="hash-link" aria-label="Link direto para Uso" title="Link direto para Uso" translate="no">​</a></h4>
<p>Renderize o <a class="" href="https://dataclient.io/pt-BR/docs/api/DataProvider">DataProvider</a> do <a href="https://dataclient.io/docs/guides/ssr#app-router" target="_blank" rel="noopener noreferrer" class="">ponto de entrada /nextjs</a> no seu <a href="https://nextjs.org/docs/app/building-your-application/routing/pages-and-layouts#root-layout-required" target="_blank" rel="noopener noreferrer" class="">layout raiz</a>.</p>
<div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">app/layout.tsx</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">DataProvider</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react/nextjs'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AsyncBoundary</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">RootLayout</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> children </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">html</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">DataProvider</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">header</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">header</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">AsyncBoundary</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">children</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">AsyncBoundary</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">footer</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">footer</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">DataProvider</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">html</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<div style="text-align:center"><a class="button button--primary" href="https://dataclient.io/pt-BR/docs/guides/ssr#nextjs">Guia completo de NextJS</a></div>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="mutations-demo">Demonstração de mutações<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#mutations-demo" class="hash-link" aria-label="Link direto para Demonstração de mutações" title="Link direto para Demonstração de mutações" translate="no">​</a></h4>
<div class="card_wNtI"><p class="cardTitle_q8VY">Explore o exemplo nextjs</p><div class="cardLinks_EoYh"><a href="https://stackblitz.com/github/reactive/data-client/tree/master/examples/nextjs?file=components%2Ftodo%2FTodoList.tsx%2Capp%2Flayout.tsx" target="_blank" rel="noopener noreferrer" class="button button--primary">Abrir no StackBlitz</a><a href="https://github.com/reactive/data-client/tree/master/examples/nextjs" target="_blank" rel="noopener noreferrer" class="button button--secondary">Ver código-fonte</a></div></div><div class="wrapper_ZhQy"><span class="loading_rblT" aria-hidden="true">Carregando a demo…</span><iframe width="100%" height="500" title="Demo de nextjs no StackBlitz" class="frame_PtfY"></iframe></div><p style="text-align:center"><a class="button button--secondary button--sm" href="https://dataclient.io/pt-BR/demos">Mais demos</a></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="live-data-demo">Demonstração de dados ao vivo<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#live-data-demo" class="hash-link" aria-label="Link direto para Demonstração de dados ao vivo" title="Link direto para Demonstração de dados ao vivo" translate="no">​</a></h4>
<div><iframe src="https://coin-app-lake.vercel.app" width="100%" height="400"></iframe><p style="text-align:center"><a href="https://coin-app-lake.vercel.app/" target="_blank" rel="noopener noreferrer" class="button button--secondary button--sm">Abrir em uma nova aba</a>&nbsp;<a href="https://github.com/reactive/coin-app" target="_blank" rel="noopener noreferrer" class="button button--secondary button--sm">Github</a></p></div>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="other-ssr">Outros SSR<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#other-ssr" class="hash-link" aria-label="Link direto para Outros SSR" title="Link direto para Outros SSR" translate="no">​</a></h4>
<p>Adiciona o <a class="" href="https://dataclient.io/pt-BR/docs/guides/ssr#express-js-ssr">ponto de entrada /ssr</a> - eliminando completamente a necessidade do pacote @data-client/ssr <a href="https://github.com/reactive/data-client/commit/d1b9e96dffe69527f9ce0ebff4727f0b1226c9d5" target="_blank" rel="noopener noreferrer" class=""><code>d1b9e96</code></a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  createPersistedStore</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  createServerDataComponent</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports"></span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/ssr'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  createPersistedStore</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  createServerDataComponent</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports"></span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react/ssr'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p>Isso torna possível integrar facilmente o Data Client a qualquer framework de SSR.
Recebemos de bom grado <a href="https://github.com/reactive/data-client/blob/master/CONTRIBUTING.md" target="_blank" rel="noopener noreferrer" class="">contribuições</a> para a integração
com qualquer framework open source.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="expo">Expo<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#expo" class="hash-link" aria-label="Link direto para Expo" title="Link direto para Expo" translate="no">​</a></h3>
<p>Começamos a trabalhar em demonstrações com Expo/ExpoGo e, com isso, encontramos e corrigimos alguns problemas de compatibilidade
nessas integrações. Por favor, <a href="https://github.com/reactive/data-client/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">relate qualquer problema</a>
que possa ter passado despercebido.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="react-19">React 19<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#react-19" class="hash-link" aria-label="Link direto para React 19" title="Link direto para React 19" translate="no">​</a></h3>
<p>Agora damos suporte ao React 19. <a href="https://github.com/reactive/data-client/pull/3071" target="_blank" rel="noopener noreferrer" class="">#3071</a></p>
<p>Isso exigiu abandonar o suporte a versões anteriores à 16.14, já que precisamos usar o runtime de jsx
exportado pelo próprio React. Isso tem o benefício adicional de reduzir o tamanho do bundle.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="redux">Redux<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#redux" class="hash-link" aria-label="Link direto para Redux" title="Link direto para Redux" translate="no">​</a></h3>
<p>Adiciona <a class="" href="https://dataclient.io/pt-BR/docs/guides/redux">@data-client/react/redux</a> <a href="https://github.com/reactive/data-client/pull/3099" target="_blank" rel="noopener noreferrer" class="">#3099</a>.
Isso elimina a necessidade do pacote separado @data-client/redux.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  </span><span class="token imports maybe-class-name">ExternalDataProvider</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  </span><span class="token imports maybe-class-name">PromiseifyMiddleware</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  applyManager</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  initialState</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  createReducer</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  prepareStore</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports"></span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/redux'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  </span><span class="token imports maybe-class-name">ExternalDataProvider</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  </span><span class="token imports maybe-class-name">PromiseifyMiddleware</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  applyManager</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  initialState</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  createReducer</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports">  prepareStore</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token imports"></span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react/redux'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p>Adiciona o argumento middlewares a prepareStore() <a href="https://github.com/reactive/data-client/pull/3099" target="_blank" rel="noopener noreferrer" class="">#3099</a></p>
<div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> store</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> selector</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> controller </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">prepareStore</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  initialState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  managers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token maybe-class-name">Controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  otherReducers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  extraMiddlewares</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="controllerset">controller.set()<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#controllerset" class="hash-link" aria-label="Link direto para controller.set()" title="Link direto para controller.set()" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#set">controller.set()</a> atualiza qualquer <a class="" href="https://dataclient.io/pt-BR/rest/api/schema#schema-overview">Schema</a> <a class="" href="https://dataclient.io/pt-BR/rest/api/schema#queryable">Queryable</a>. <a href="https://github.com/reactive/data-client/pull/3105" target="_blank" rel="noopener noreferrer" class="">#3105</a>, <a href="https://github.com/reactive/data-client/pull/3129" target="_blank" rel="noopener noreferrer" class="">#3129</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'5'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'5'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> title</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'tell me friends how great Data Client is'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Funções podem ser usadas no valor quando há dados derivados. Isso <a href="https://react.dev/reference/react/useState#updating-state-based-on-the-previous-state" target="_blank" rel="noopener noreferrer" class="">evita condições de corrida</a>.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'2'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Article</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> article </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> votes</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> article</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">votes </span><span class="token operator" style="color:rgb(137, 221, 255)">+</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<div class="theme-admonition theme-admonition-note admonition_WCGJ alert alert--secondary"><div class="admonitionHeading_GCBg"><span class="admonitionIcon_L39b"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>observação</div><div class="admonitionContent_pbrs"><p>A resposta deve incluir valores suficientes para calcular Entity.pk()</p></div></div>
<p>Isso torna mais direto manipular a store com <a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers">Managers</a>.
Por exemplo, podemos definir diretamente nossa entidade <code>Ticker</code> ao receber mensagens de websocket:</p>
<!-- -->
<div class="card_wNtI"><p class="cardTitle_q8VY">Explore o exemplo coin-app</p><div class="cardLinks_EoYh"><a href="https://stackblitz.com/github/reactive/data-client/tree/master/examples/coin-app?file=src%2FgetManagers.ts%2Csrc%2Fresources%2FTicker.ts%2Csrc%2Fpages%2FAssetDetail%2FAssetPrice.tsx%2Csrc%2Fresources%2FStreamManager.ts" target="_blank" rel="noopener noreferrer" class="button button--primary">Abrir no StackBlitz</a><a href="https://github.com/reactive/data-client/tree/master/examples/coin-app" target="_blank" rel="noopener noreferrer" class="button button--secondary">Ver código-fonte</a></div></div><div class="wrapper_ZhQy"><span class="loading_rblT" aria-hidden="true">Carregando a demo…</span><iframe width="100%" height="600" title="Demo de coin-app no StackBlitz" class="frame_PtfY"></iframe></div><p style="text-align:center"><a class="button button--secondary button--sm" href="https://dataclient.io/pt-BR/demos">Mais demos</a></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="type-improvements">Melhorias de tipos<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#type-improvements" class="hash-link" aria-label="Link direto para Melhorias de tipos" title="Link direto para Melhorias de tipos" translate="no">​</a></h2>
<ul>
<li class="">
<p>Melhora a correspondência de tipos dos métodos do <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller">controller</a> <a href="https://github.com/reactive/data-client/pull/3043" target="_blank" rel="noopener noreferrer" class="">#3043</a></p>
</li>
<li class="">
<p>Melhora a correspondência dos tipos de argumentos de <a class="" href="https://dataclient.io/pt-BR/docs/api/useFetch">useFetch()</a>, de forma semelhante a <a class="" href="https://dataclient.io/pt-BR/docs/api/useSuspense">useSuspense()</a> <a href="https://github.com/reactive/data-client/pull/3043" target="_blank" rel="noopener noreferrer" class="">#3043</a></p>
</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="rest-changes">Mudanças no REST<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#rest-changes" class="hash-link" aria-label="Link direto para Mudanças no REST" title="Link direto para Mudanças no REST" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="path-strings">Strings de path<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#path-strings" class="hash-link" aria-label="Link direto para Strings de path" title="Link direto para Strings de path" translate="no">​</a></h3>
<p>Suporte a + e * e {} em <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#path">RestEndpoint.path</a>. <a href="https://github.com/reactive/data-client/commit/a6b4f4aabbfd06f5106a96e809a6c1a5e7045172" target="_blank" rel="noopener noreferrer" class=""><code>a6b4f4a</code></a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getThing </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/:attr1?{-:attr2}?{-:attr3}?'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">getThing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> attr1</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'hi'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">getThing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> attr2</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'hi'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">getThing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> attr3</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'hi'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">getThing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> attr1</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'hi'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> attr3</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'ho'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">getThing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> attr2</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'hi'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> attr3</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'ho'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="ctrlfetch-and-unions">ctrl.fetch() e Unions<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#ctrlfetch-and-unions" class="hash-link" aria-label="Link direto para ctrl.fetch() e Unions" title="Link direto para ctrl.fetch() e Unions" translate="no">​</a></h3>
<p>Valores de <a class="" href="https://dataclient.io/pt-BR/rest/api/Union">Unions</a> no valor de retorno de <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#fetch">ctrl.fetch()</a> agora são uma instância de sua classe Entity. <a href="https://github.com/reactive/data-client/pull/3063" target="_blank" rel="noopener noreferrer" class="">#3063</a></p>
<div class="playgroundQueryContainer_vBqa"><div class="playgroundContainer_sLUA standaloneEditor_OHub"><div class="playgroundTextEdit_rt2K"><div class="playgroundHeader_Zx4K noupper_WDCF tabControls_trxh small_xksL"><div class="tabs_m54V" role="tablist" aria-orientation="horizontal"><div role="tab" aria-selected="false" tabindex="-1" class="tab_bTGw">Feed</div><div role="tab" aria-selected="true" tabindex="0" class="tab_bTGw selected_QXZk">useFeed</div></div></div><div class="playgroundEditor_lYwu hidden_Hh8i"></div><div class="playgroundEditor_lYwu"><div><pre class="prism-code language-ts" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#bfc7d5;background-color:transparent" spellcheck="false"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> getFeed </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'./Feed'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useFeedHandler</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ctrl </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useController</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">handleSomething</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> feed </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getFeed</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> feed</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">map</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">item </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">item</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">type </span><span class="token operator" style="color:rgb(137, 221, 255)">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'link'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// we can use class defined getter</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> item</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">anchor</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> handleSomething</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span>
</span></pre></div></div></div></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="migration-guide">Guia de migração<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#migration-guide" class="hash-link" aria-label="Link direto para Guia de migração" title="Link direto para Guia de migração" translate="no">​</a></h2>
<!-- -->
<p>Esta atualização exige atualizar todas as versões dos pacotes ao mesmo tempo.</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">NPM</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">esm.sh</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> @data-client/react@^0.13.0 @data-client/rest@^0.13.0 @data-client/test@^0.13.0 @data-client/img@^0.13.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">yarn</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.13.0 @data-client/rest@^0.13.0 @data-client/test@^0.13.0 @data-client/img@^0.13.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.13.0 @data-client/rest@^0.13.0 @data-client/test@^0.13.0 @data-client/img@^0.13.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="language-html codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-html codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">importmap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript string-property property">"imports"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/react"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/react@^0.13.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/rest"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/rest@^0.13.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/test"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/test@^0.13.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/img"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/img@^0.13.0"</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="set_response_type">actionTypes.SET_TYPE -&gt; actionTypes.SET_RESPONSE_TYPE<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#set_response_type" class="hash-link" aria-label="Link direto para actionTypes.SET_TYPE -> actionTypes.SET_RESPONSE_TYPE" title="Link direto para actionTypes.SET_TYPE -> actionTypes.SET_RESPONSE_TYPE" translate="no">​</a></h3>
<p>Se você escreveu um Manager personalizado que tratava <code>actionTypes.SET_TYPE</code>, precisará
renomeá-lo para <a class="" href="https://dataclient.io/pt-BR/docs/api/Actions#set_response">actionTypes.SET_RESPONSE_TYPE</a>.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token maybe-class-name">Manager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token maybe-class-name">Middleware</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> actionTypes </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">LoggingManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  middleware</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">Middleware</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> controller </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> actionTypes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token constant" style="color:rgb(130, 170, 255)">SET_TYPE</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">info</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">          </span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">action</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">endpoint</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string string" style="color:rgb(195, 232, 141)"> </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation constant" style="color:rgb(130, 170, 255)">JSON</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation function" style="color:rgb(130, 170, 255)">stringify</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string interpolation">action</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">response</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// actions must be explicitly passed to next middleware</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">default</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token maybe-class-name">Manager</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token maybe-class-name">Middleware</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> actionTypes </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">LoggingManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  middleware</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">Middleware</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> controller </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> actionTypes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token constant" style="color:rgb(130, 170, 255)">SET_RESPONSE_TYPE</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">info</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">          </span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation">action</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">endpoint</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">name</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string string" style="color:rgb(195, 232, 141)"> </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation constant" style="color:rgb(130, 170, 255)">JSON</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation function" style="color:rgb(130, 170, 255)">stringify</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token template-string interpolation">action</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">response</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// actions must be explicitly passed to next middleware</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">default</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="set-action">SetAction -&gt; SetResponseAction<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#set-action" class="hash-link" aria-label="Link direto para SetAction -> SetResponseAction" title="Link direto para SetAction -> SetResponseAction" translate="no">​</a></h3>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="react-version">React 16.14+<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#react-version" class="hash-link" aria-label="Link direto para React 16.14+" title="Link direto para React 16.14+" translate="no">​</a></h3>
<p>Altera a versão mínima do React de 16.8.4 -&gt; 16.14. Nenhuma alteração de código é necessária.</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">NPM</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">esm.sh</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> react@16.14 react-dom@16.14</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">yarn</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> react@16.14 react-dom@16.14</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> react@16.14 react-dom@16.14</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="language-html codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-html codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">importmap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript string-property property">"imports"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"react"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/react@16.14"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"react-dom"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/react-dom@16.14"</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="data-provider">CacheProvider -&gt; DataProvider<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#data-provider" class="hash-link" aria-label="Link direto para CacheProvider -> DataProvider" title="Link direto para CacheProvider -> DataProvider" translate="no">​</a></h3>
<p>Migre para o <a class="" href="https://dataclient.io/pt-BR/docs/api/DataProvider">DataProvider</a> para garantir compatibilidade com versões futuras. Ele também
é exportado como <code>CacheProvider</code>, então esta não é uma mudança incompatível. <a href="https://github.com/reactive/data-client/pull/3095" target="_blank" rel="noopener noreferrer" class="">#3095</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">CacheProvider</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">ReactDOM</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'react-dom'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token maybe-class-name">ReactDOM</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">createRoot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token dom variable" style="color:rgb(191, 199, 213)">document</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">body</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">render</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">CacheProvider</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">App</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">CacheProvider</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">DataProvider</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">ReactDOM</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'react-dom'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token maybe-class-name">ReactDOM</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">createRoot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token dom variable" style="color:rgb(191, 199, 213)">document</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">body</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">render</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">DataProvider</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">App</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">DataProvider</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrade-support">Suporte à atualização<a href="https://dataclient.io/pt-BR/blog/2024/06/17/v0.13-nextjs-app-router-expogo-native#upgrade-support" class="hash-link" aria-label="Link direto para Suporte à atualização" title="Link direto para Suporte à atualização" translate="no">​</a></h3>
<p>Como sempre, se você tiver qualquer problema ou dúvida, fique à vontade para entrar no nosso <a href="https://discord.gg/wXGV27xm6t" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://img.shields.io/discord/768254430381735967.svg?style=flat-square&amp;colorB=758ED3" alt="Chat" class="img_SS3x"></a> ou <a href="https://github.com/reactive/data-client/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">registrar um bug</a></p>]]></content>
        <author>
            <name>Nathaniel Tucker</name>
            <uri>https://github.com/ntucker</uri>
        </author>
        <category label="Versões" term="Versões"/>
        <category label="NextJS" term="NextJS"/>
        <category label="Expo" term="Expo"/>
        <category label="React Native" term="React Native"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.11 Queries, Queryable e useQuery]]></title>
        <id>https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery</id>
        <link href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery"/>
        <updated>2024-04-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A versão 0.11 do Data Client traz um novo acesso direto e memoizado à store com qualquer Schema Queryable por meio do hook useQuery]]></summary>
        <content type="html"><![CDATA[<p>Além dos benefícios de desempenho e integridade de dados de <a href="https://react.dev/learn/choosing-the-state-structure" target="_blank" rel="noopener noreferrer" class="">normalizar o estado</a>,
ganhamos a vantagem adicional de poder acessar e consultar a store diretamente com segurança.</p>
<p>Nesta versão, ajustamos e simplificamos essa funcionalidade unificando tudo em torno do conceito de <a class="" href="https://dataclient.io/pt-BR/docs/api/useQuery#queryable">Schemas Queryable</a>. Eles incluem
<a class="" href="https://dataclient.io/pt-BR/rest/api/Entity">Entity</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/All">All</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a>
e <a class="" href="https://dataclient.io/pt-BR/rest/api/Union">Union</a></p>
<p>O maior impacto dessa mudança é a introdução de um novo hook, <a class="" href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#usequery">useQuery()</a>, que permite consultas diretas à store
usando os <a class="" href="https://dataclient.io/pt-BR/docs/api/useQuery#queryable">Schemas Queryable</a>.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">User</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  username </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  groupId </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> index </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(195, 232, 141)">'username'</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> bob </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> username</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'bob'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> bob </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'5'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>De forma semelhante, podemos consultar Queryables com o controller e o snapshot usando <a class="" href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#controllerget">controller.get</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> bob </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> username</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'bob'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Além disso, investimos em mais <a class="" href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#performance">melhorias de desempenho</a>, resultando em um ganho de cerca de 2x
na maioria das operações e em <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Queries</a> 16x mais rápidas.</p>
<center><a class="button button--secondary" href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#migration-guide">Guia de migração</a></center>
<p><strong>Mudanças incompatíveis:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#removed-index">useCache(new Index(MyEntity)) -&gt; useQuery(MyEntity)</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#query-migration">new Query -&gt; new schema.Query</a>
<ul>
<li class="">useCache(myQuery) -&gt; useQuery(myQuery)</li>
</ul>
</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#snap.abort">new AbortOptimistic() -&gt; snapshot.abort</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#shouldupdate">Entity.useIncoming → Entity.shouldUpdate</a></li>
</ul>
<p><a class="" href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#other-improvements"><strong>Outros destaques:</strong></a></p>
<ul>
<li class="">useCache() aceita Endpoints com sideEffects (como <a class="" href="https://dataclient.io/pt-BR/rest/api/resource#update">Resource.update</a>)</li>
<li class="">Permite que Entity.pk() retorne números.</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#performance">Melhorias de desempenho</a> de 2 a 16x</li>
</ul>
<!-- -->
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="querable">Querable<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#querable" class="hash-link" aria-label="Link direto para Querable" title="Link direto para Querable" translate="no">​</a></h3>
<p>Schemas <a class="" href="https://dataclient.io/pt-BR/rest/api/schema#queryable">Queryable</a> exigem um método <code>queryKey()</code> que retorne algo. Eles incluem
<a class="" href="https://dataclient.io/pt-BR/rest/api/Entity">Entity</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/All">All</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a>
e <a class="" href="https://dataclient.io/pt-BR/rest/api/Union">Union</a>.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">interface</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Queryable</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">queryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">readonly</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">queryKey</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    getEntity</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> GetEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    getIndex</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> GetIndex</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// `{}` means non-void</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="schemaquery">schema.Query<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#schemaquery" class="hash-link" aria-label="Link direto para schema.Query" title="Link direto para schema.Query" translate="no">​</a></h3>
<p><code>Query</code> antes era implementado como um Endpoint. Como agora temos formas de recuperar schemas Queryable
diretamente, podemos simplesmente tornar Query mais um schema Queryable. Ele deve funcionar basicamente da mesma forma,
permitindo computações arbitrárias sobre o valor vindo de uma store. <a href="https://github.com/reactive/data-client/pull/2921" target="_blank" rel="noopener noreferrer" class="">#2921</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getUserCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">All</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> isAdmin </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">isAdmin </span><span class="token operator" style="color:rgb(137, 221, 255)">!==</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">filter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">user </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">isAdmin </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> isAdmin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">length</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">length</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> userCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getUserCount</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> adminCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getUserCount</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> isAdmin</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>schema.Query agora não permite schemas que não sejam Queryable.</p>
<div class="playgroundQueryContainer_vBqa"><div class="playgroundContainer_sLUA standaloneEditor_OHub"><div class="playgroundTextEdit_rt2K"><div class="playgroundEditor_lYwu"><div><pre class="prism-code language-ts" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#bfc7d5;background-color:transparent" spellcheck="false"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getBob </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Array is not Queryable</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Array</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> bob</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  thing </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> thing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span>
</span></pre></div></div></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="controllerget">controller.get / snapshot.get<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#controllerget" class="hash-link" aria-label="Link direto para controller.get / snapshot.get" title="Link direto para controller.get / snapshot.get" translate="no">​</a></h3>
<p>Agora podemos <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#get">acessar a store</a> apenas com um Schema Queryable - não precisamos mais de um Endpoint inteiro.
<a href="https://github.com/reactive/data-client/pull/2921" target="_blank" rel="noopener noreferrer" class="">#2921</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">getOptimisticResponse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> data</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> post </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getResponse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Base</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">throw</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">abort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    votes</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">votes </span><span class="token operator" style="color:rgb(137, 221, 255)">+</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">getOptimisticResponse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> post </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">throw</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">abort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    votes</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">votes </span><span class="token operator" style="color:rgb(137, 221, 255)">+</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<p>Como não precisamos mais acessar outros <a class="" href="https://dataclient.io/pt-BR/rest/api/resource#members">membros do Resource</a> para obter <code>Post</code>,
podemos usar a sobrecarga muito mais simples de <a class="" href="https://dataclient.io/pt-BR/rest/api/resource#extend-new">Resource.extend()</a>.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> PostResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">createResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/posts/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">extend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Base </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  vote</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/posts/:id/vote'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    method</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'POST'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    body</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function" style="color:rgb(130, 170, 255)">getOptimisticResponse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> data</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> post </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getResponse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Base</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">throw</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">abort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        votes</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">votes </span><span class="token operator" style="color:rgb(137, 221, 255)">+</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> PostResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">createResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/posts/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">extend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'vote'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/posts/:id/vote'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  method</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'POST'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  body</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">getOptimisticResponse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> post </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">throw</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">abort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      votes</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> post</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">votes </span><span class="token operator" style="color:rgb(137, 221, 255)">+</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="usequery">useQuery<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#usequery" class="hash-link" aria-label="Link direto para useQuery" title="Link direto para useQuery" translate="no">​</a></h3>
<p>Renderiza qualquer <a class="" href="https://dataclient.io/pt-BR/rest/api/schema#queryable">Schema Queryable</a> a partir da store.
<a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Queries</a> são uma ótima companhia para renderizar com eficiência computações agregadas, como as que usam <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy#browser_compatibility" target="_blank" rel="noopener noreferrer" class="">groupBy</a>,
<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" target="_blank" rel="noopener noreferrer" class="">map</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce" target="_blank" rel="noopener noreferrer" class="">reduce</a> e <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter" target="_blank" rel="noopener noreferrer" class="">filter</a>. <a href="https://github.com/reactive/data-client/pull/2921" target="_blank" rel="noopener noreferrer" class="">#2921</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">User</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  username </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  groupId </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> index </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(195, 232, 141)">'username'</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> bob </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> username</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'bob'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getUserCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">All</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> isAdmin </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">isAdmin </span><span class="token operator" style="color:rgb(137, 221, 255)">!==</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">filter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">user </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">isAdmin </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> isAdmin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">length</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">length</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> userCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getUserCount</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> adminCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getUserCount</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> isAdmin</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> UserCollection </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Collection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">argsKey</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">urlParams</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> groupId</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">urlParams</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> usersInGroup </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">UserCollection</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> groupId</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'5'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="performance">Desempenho<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#performance" class="hash-link" aria-label="Link direto para Desempenho" title="Link direto para Desempenho" translate="no">​</a></h2>
<p>Novas otimizações tanto no sistema de cache quanto em todos os caminhos críticos do código deram um
belo ganho de 2x às operações mais comuns. Com a adição da <a href="https://github.com/reactive/data-client/pull/2978" target="_blank" rel="noopener noreferrer" class="">capacidade de cache de queries</a>, vemos uma melhoria ainda mais impressionante de 16x em nosso benchmark de ordenação com Query.</p>
<p>Isso se soma à <a class="" href="https://dataclient.io/pt-BR/docs/concepts/normalization#benchmarks">vantagem já existente (de até 23x) sobre a biblioteca normalizr legada</a>.</p>
<center><div style="max-width:600px"></div><p><a href="https://reactive.github.io/data-client/dev/bench/" target="_blank" rel="noopener noreferrer" class="">Benchmarks ao longo do tempo</a> | <a href="https://github.com/reactive/data-client/tree/master/examples/benchmark" target="_blank" rel="noopener noreferrer" class="">Ver benchmark</a></p></center>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="other-improvements">Outras melhorias<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#other-improvements" class="hash-link" aria-label="Link direto para Outras melhorias" title="Link direto para Outras melhorias" translate="no">​</a></h2>
<ul>
<li class="">useCache() aceita Endpoints com sideEffects (como <a class="" href="https://dataclient.io/pt-BR/rest/api/resource#update">Resource.update</a>) <a href="https://github.com/reactive/data-client/pull/2963" target="_blank" rel="noopener noreferrer" class="">#2963</a>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> lastCreated </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">MyResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">push</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
</li>
<li class="">Permite que pk retorne números <a href="https://github.com/reactive/data-client/pull/2961" target="_blank" rel="noopener noreferrer" class="">#2961</a>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyEntity</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token template-string interpolation keyword" style="font-style:italic">this</span><span class="token template-string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token template-string interpolation">id</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token template-string template-punctuation string" style="color:rgb(195, 232, 141)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyEntity</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
</li>
<li class="">Tipagem<!-- -->
<ul>
<li class="">Melhora a tipagem de .extend() ao usar <a href="https://www.typescriptlang.org/tsconfig#strictNullChecks" target="_blank" rel="noopener noreferrer" class="">verificações de null não estritas</a> e nenhum parâmetro body <a href="https://github.com/reactive/data-client/pull/2962" target="_blank" rel="noopener noreferrer" class="">#2962</a>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Parameters</span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token keyword" style="font-style:italic">typeof</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/test'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">extend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/test2'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><br></div></code></pre></div></div>
</li>
<li class="">O tipo padrão de Args de Collection agora é: <a href="https://github.com/reactive/data-client/commit/8377e0a157419f0f4c237c392a895fec1772854d" target="_blank" rel="noopener noreferrer" class="">8377e</a>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token operator" style="color:rgb(137, 221, 255)">|</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token operator" style="color:rgb(137, 221, 255)">|</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">urlParams</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Record</span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token operator" style="color:rgb(137, 221, 255)">|</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">urlParams</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Record</span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> body</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><br></div></code></pre></div></div>
</li>
</ul>
</li>
<li class="">Correções<!-- -->
<ul>
<li class="">O caso INVALID na desnormalização de schema.All também deve funcionar quando os nomes de classe são minificados em builds de produção <a href="https://github.com/reactive/data-client/pull/2954" target="_blank" rel="noopener noreferrer" class="">#2954</a>
<ul>
<li class=""><code>unvisit()</code> sempre retorna <code>undefined</code> quando recebe <code>undefined</code> como entrada.</li>
<li class=""><code>All</code> retorna INVALID de <code>queryKey()</code> para invalidar o que antes era um caso especial em <code>unvisit()</code> (quando não há entrada na tabela para a entidade em questão)</li>
</ul>
</li>
<li class="">Entidades aninhadas ausentes devem aparecer assim que estiverem presentes <a href="https://github.com/reactive/data-client/pull/2956" target="_blank" rel="noopener noreferrer" class="">#2956</a>, <a href="https://github.com/reactive/data-client/pull/2961" target="_blank" rel="noopener noreferrer" class="">#2961</a></li>
</ul>
</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="migration-guide">Guia de migração<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#migration-guide" class="hash-link" aria-label="Link direto para Guia de migração" title="Link direto para Guia de migração" translate="no">​</a></h2>
<!-- -->
<p>Esta atualização exige atualizar todas as versões dos pacotes ao mesmo tempo.</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">NPM</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">esm.sh</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> @data-client/react@^0.11.0 @data-client/rest@^0.11.0 @data-client/test@^0.11.0 @data-client/img@^0.11.0 @data-client/hooks@^0.11.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">yarn</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.11.0 @data-client/rest@^0.11.0 @data-client/test@^0.11.0 @data-client/img@^0.11.0 @data-client/hooks@^0.11.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.11.0 @data-client/rest@^0.11.0 @data-client/test@^0.11.0 @data-client/img@^0.11.0 @data-client/hooks@^0.11.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="language-html codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-html codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">importmap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript string-property property">"imports"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/react"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/react@^0.11.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/rest"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/rest@^0.11.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/test"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/test@^0.11.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/img"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/img@^0.11.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/hooks"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/hooks@^0.11.0"</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="removed-index">Index removido<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#removed-index" class="hash-link" aria-label="Link direto para Index removido" title="Link direto para Index removido" translate="no">​</a></h3>
<p>Basta usar Entities diretamente em <a class="" href="https://dataclient.io/pt-BR/docs/api/useQuery">useQuery</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token maybe-class-name">UserIndex</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Index</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> bob </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">UserIndex</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> username</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'bob'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> bob </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> username</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'bob'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="query-migration">new Query -&gt; new schema.Query<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#query-migration" class="hash-link" aria-label="Link direto para new Query -> new schema.Query" title="Link direto para new Query -> new schema.Query" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a> agora é um schema; usado com <a class="" href="https://dataclient.io/pt-BR/docs/api/useQuery">useQuery</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getUserCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access maybe-class-name" style="color:rgb(130, 170, 255)">All</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> isAdmin </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">isAdmin </span><span class="token operator" style="color:rgb(137, 221, 255)">!==</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">filter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">user </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">isAdmin</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> isAdmin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">length</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">length</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> userCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getUserCount</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> adminCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getUserCount</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> isAdmin</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getUserCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access maybe-class-name" style="color:rgb(130, 170, 255)">Query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access maybe-class-name" style="color:rgb(130, 170, 255)">All</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> isAdmin </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">isAdmin </span><span class="token operator" style="color:rgb(137, 221, 255)">!==</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">filter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">user </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">isAdmin</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> isAdmin</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">length</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> entries</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">length</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> userCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getUserCount</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> adminCount </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getUserCount</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> isAdmin</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="snap.abort">new AbortOptimistic() -&gt; snapshot.abort<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#snap.abort" class="hash-link" aria-label="Link direto para new AbortOptimistic() -> snapshot.abort" title="Link direto para new AbortOptimistic() -> snapshot.abort" translate="no">​</a></h3>
<p><a href="https://dataclient.io/docs/api/Snapshot#abort" target="_blank" rel="noopener noreferrer" class="">snapshot.abort</a> elimina a necessidade de importar AbortOptimistic <a href="https://github.com/reactive/data-client/pull/2957" target="_blank" rel="noopener noreferrer" class="">#2957</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">getOptimisticResponse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> data </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getResponse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Base</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">AbortOptimistic</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    votes</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">votes </span><span class="token operator" style="color:rgb(137, 221, 255)">+</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">getOptimisticResponse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> data </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getResponse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Base</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">throw</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">abort</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    votes</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">votes </span><span class="token operator" style="color:rgb(137, 221, 255)">+</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="shouldupdate">Entity.useIncoming → Entity.shouldUpdate<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#shouldupdate" class="hash-link" aria-label="Link direto para Entity.useIncoming → Entity.shouldUpdate" title="Link direto para Entity.useIncoming → Entity.shouldUpdate" translate="no">​</a></h3>
<p>Torna o nome de <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#shouldupdate">Entity.shouldUpdate</a> consistente com <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#shouldreorder">Entity.shouldReorder</a> <a href="https://github.com/reactive/data-client/pull/2972" target="_blank" rel="noopener noreferrer" class="">#2972</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyEntity</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useIncoming</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    existingMeta</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> date</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    incomingMeta</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> date</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    existing</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    incoming</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token function" style="color:rgb(130, 170, 255)">deepEquals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">existing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> incoming</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyEntity</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">shouldUpdate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    existingMeta</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> date</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    incomingMeta</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> date</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    existing</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    incoming</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">!</span><span class="token function" style="color:rgb(130, 170, 255)">deepEquals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">existing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> incoming</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="usedle-reactive-native-focus-handling">Tratamento de foco do useDLE() no React Native<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#usedle-reactive-native-focus-handling" class="hash-link" aria-label="Link direto para Tratamento de foco do useDLE() no React Native" title="Link direto para Tratamento de foco do useDLE() no React Native" translate="no">​</a></h3>
<p>Assim como <a class="" href="https://dataclient.io/pt-BR/docs/api/useSuspense">useSuspense()</a> e <a class="" href="https://dataclient.io/pt-BR/docs/api/useFetch">useFetch()</a>, <a class="" href="https://dataclient.io/pt-BR/docs/api/useDLE">useDLE()</a> agora
pode revalidar os dados em eventos de foco.</p>
<p>Ao usar React Navigation, useDLE() disparará buscas no foco se os dados forem considerados
desatualizados.</p>
<p>Isso pode resultar em mais buscas do que ocorriam anteriormente.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="potential-but-unlikely-breaking-changes">Mudanças potencialmente, mas improvavelmente, incompatíveis<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#potential-but-unlikely-breaking-changes" class="hash-link" aria-label="Link direto para Mudanças potencialmente, mas improvavelmente, incompatíveis" title="Link direto para Mudanças potencialmente, mas improvavelmente, incompatíveis" translate="no">​</a></h3>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="schemainfer---schemaquerykey-2977">Schema.infer() -&gt; Schema.queryKey() <a href="https://github.com/reactive/data-client/pull/2977" target="_blank" rel="noopener noreferrer" class="">#2977</a><a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#schemainfer---schemaquerykey-2977" class="hash-link" aria-label="Link direto para schemainfer---schemaquerykey-2977" title="Link direto para schemainfer---schemaquerykey-2977" translate="no">​</a></h4>
<p>A maioria das pessoas não sobrescreveu o método <code>infer()</code>. Se esse for o seu caso, você precisa renomeá-lo para <code>queryKey()</code>
e também atualizar a lista de parâmetros.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyEntity</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">infer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">readonly</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    indexes</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> NormalizedIndex</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    recurse</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    entities</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token constant" style="color:rgb(130, 170, 255)">SILLYCONDITION</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token operator" style="color:rgb(137, 221, 255)">?.</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">someId</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> someId</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">super</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">infer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> indexes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> recurse</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyEntity</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">queryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">readonly</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">queryKey</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">args</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    getEntity</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> GetEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    getIndex</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> GetIndex</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token constant" style="color:rgb(130, 170, 255)">SILLYCONDITION</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token function" style="color:rgb(130, 170, 255)">getEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> someId</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> someId</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">super</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">queryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> queryKey</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> getEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> getIndex</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h5 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="getentitykey-pk">getEntity(key, pk?)<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#getentitykey-pk" class="hash-link" aria-label="Link direto para getEntity(key, pk?)" title="Link direto para getEntity(key, pk?)" translate="no">​</a></h5>
<p>Obtém todas as entidades de um tipo com um argumento, ou uma única entidade com dois</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">One argument</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> entitiesEntry </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entitiesEntry </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">INVALID</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> Object</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">values</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entitiesEntry</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">map</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  entity </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> entity </span><span class="token operator" style="color:rgb(137, 221, 255)">&amp;&amp;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Two arguments</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token function" style="color:rgb(130, 170, 255)">getEntity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h5 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="getindexkey-indexname-value">getIndex(key, indexName, value)<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#getindexkey-indexname-value" class="hash-link" aria-label="Link direto para getIndex(key, indexName, value)" title="Link direto para getIndex(key, indexName, value)" translate="no">​</a></h5>
<p>Retorna a entrada do índice (mapa de valor-&gt;pk)</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> value </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">indexName</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getIndex</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> indexName</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="always-normalize-pk-to-string-type-2961">Sempre normalizar pk para o tipo string <a href="https://github.com/reactive/data-client/pull/2961" target="_blank" rel="noopener noreferrer" class="">#2961</a><a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#always-normalize-pk-to-string-type-2961" class="hash-link" aria-label="Link direto para always-normalize-pk-to-string-type-2961" title="Link direto para always-normalize-pk-to-string-type-2961" translate="no">​</a></h4>
<p>Mudança sutil no que ficará na store. Isso provavelmente só importa ao usar <a href="https://www.npmjs.com/package/@data-client/normalizr" target="_blank" rel="noopener noreferrer" class="">@data-client/normalizr</a>
diretamente.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-json codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-json codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"Article"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"123"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"author"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">8472</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"id"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">123</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"title"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"A Great Article"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"User"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"8472"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"id"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">8472</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"name"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"Paul"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-json codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-json codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"Article"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"123"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"author"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"8472"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"id"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">123</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"title"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"A Great Article"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"User"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"8472"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"id"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">8472</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"name"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"Paul"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="stateresults---stateendpoints-2971">state.results -&gt; state.endpoints <a href="https://github.com/reactive/data-client/pull/2971" target="_blank" rel="noopener noreferrer" class="">#2971</a><a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#stateresults---stateendpoints-2971" class="hash-link" aria-label="Link direto para stateresults---stateendpoints-2971" title="Link direto para stateresults---stateendpoints-2971" translate="no">​</a></h4>
<p>Isso provavelmente só importa ao consumir <a href="https://www.npmjs.com/package/@data-client/core" target="_blank" rel="noopener noreferrer" class="">@data-client/core</a> diretamente, já que a estrutura do estado interno
é opaca para <a href="https://www.npmjs.com/package/@data-client/react" target="_blank" rel="noopener noreferrer" class="">@data-client/react</a>.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-json codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-json codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"entities"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"Article"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"5"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token property">"content"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"more things here"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token property">"id"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token property">"title"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"hi"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"results"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"GET http://test.com/articles/5"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"5"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-json codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-json codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"entities"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"Article"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token property">"5"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token property">"content"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"more things here"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token property">"id"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token property">"title"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"hi"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token property">"endpoints"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token property">"GET http://test.com/articles/5"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"5"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="inferresults---memobuildquerykey-2977-2978">inferResults() -&gt; memo.buildQueryKey() <a href="https://github.com/reactive/data-client/pull/2977" target="_blank" rel="noopener noreferrer" class="">#2977</a>, <a href="https://github.com/reactive/data-client/pull/2978" target="_blank" rel="noopener noreferrer" class="">#2978</a><a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#inferresults---memobuildquerykey-2977-2978" class="hash-link" aria-label="Link direto para inferresults---memobuildquerykey-2977-2978" title="Link direto para inferresults---memobuildquerykey-2977-2978" translate="no">​</a></h4>
<p>Esses métodos são exportados em <a href="https://www.npmjs.com/package/@data-client/core" target="_blank" rel="noopener noreferrer" class="">@data-client/core</a> e <a href="https://www.npmjs.com/package/@data-client/normalizr" target="_blank" rel="noopener noreferrer" class="">@data-client/normalizr</a>.</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="denormalizecached---memodenormalize-2978">denormalizeCached() -&gt; memo.denormalize() <a href="https://github.com/reactive/data-client/pull/2978" target="_blank" rel="noopener noreferrer" class="">#2978</a><a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#denormalizecached---memodenormalize-2978" class="hash-link" aria-label="Link direto para denormalizecached---memodenormalize-2978" title="Link direto para denormalizecached---memodenormalize-2978" translate="no">​</a></h4>
<p>Exportado em <a href="https://www.npmjs.com/package/@data-client/normalizr" target="_blank" rel="noopener noreferrer" class="">@data-client/normalizr</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> endpointCache </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">WeakEntityMap</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> entityCache </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">denormalizeCached</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  entityCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  endpointCache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> memo </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MemoCached</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">memo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">denormalize</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  input</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  state</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">entities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="weakentitymap---weakdependencymap-2978">WeakEntityMap -&gt; WeakDependencyMap <a href="https://github.com/reactive/data-client/pull/2978" target="_blank" rel="noopener noreferrer" class="">#2978</a><a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#weakentitymap---weakdependencymap-2978" class="hash-link" aria-label="Link direto para weakentitymap---weakdependencymap-2978" title="Link direto para weakentitymap---weakdependencymap-2978" translate="no">​</a></h4>
<p>Exportado em <a href="https://www.npmjs.com/package/@data-client/normalizr" target="_blank" rel="noopener noreferrer" class="">@data-client/normalizr</a></p>
<p>Generalizamos esse tipo de dado para que ele possa ser usado com outras dependências.</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">WeakEntityMap</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">WeakDependencyMap</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name" style="color:rgb(255, 203, 107)">EntityPath</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrade-support">Suporte à atualização<a href="https://dataclient.io/pt-BR/blog/2024/04/08/v0.11-queries-querable-usequery#upgrade-support" class="hash-link" aria-label="Link direto para Suporte à atualização" title="Link direto para Suporte à atualização" translate="no">​</a></h3>
<p>Como sempre, se você tiver qualquer problema ou dúvida, fique à vontade para entrar no nosso <a href="https://discord.gg/wXGV27xm6t" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://img.shields.io/discord/768254430381735967.svg?style=flat-square&amp;colorB=758ED3" alt="Chat" class="img_SS3x"></a> ou <a href="https://github.com/reactive/data-client/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">registrar um bug</a></p>]]></content>
        <author>
            <name>Nathaniel Tucker</name>
            <uri>https://github.com/ntucker</uri>
        </author>
        <category label="Versões" term="Versões"/>
        <category label="Queryable" term="Queryable"/>
        <category label="Schemas" term="Schemas"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.10: Tratamento consistente de null, utilitários de URL]]></title>
        <id>https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities</id>
        <link href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities"/>
        <updated>2024-02-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[O Data Client 0.10 traz tratamento consistente de null em todos os schemas, novos utilitários de construção de URL para RestEndpoint e corrige vazamentos de memória no DevTools.]]></summary>
        <content type="html"><![CDATA[<p>Esta versão foca em consistência e extensibilidade. O <a class="" href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#null-consistency">tratamento de null</a> agora é uniforme em todos os tipos de schema,
tornando as transformações de dados mais previsíveis. Novos <a class="" href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#url-utilities">utilitários de URL</a> permitem construção personalizada de URLs e codificação de parâmetros de busca.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyEndpoint</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name constant" style="color:rgb(130, 170, 255)">O</span><span class="token class-name" style="color:rgb(255, 203, 107)"> </span><span class="token class-name keyword" style="color:rgb(255, 203, 107);font-style:italic">extends</span><span class="token class-name" style="color:rgb(255, 203, 107)"> RestGenerics </span><span class="token class-name operator" style="color:rgb(137, 221, 255)">=</span><span class="token class-name" style="color:rgb(255, 203, 107)"> </span><span class="token class-name builtin" style="color:rgb(130, 170, 255)">any</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name constant" style="color:rgb(130, 170, 255)">O</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">searchToString</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">searchParams</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Use qs library for complex nested object encoding</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> qs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">stringify</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">searchParams</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<center><a class="button button--secondary" href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#migration-guide">Guia de migração</a></center>
<p><strong>Mudanças incompatíveis:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#null-consistency">Valores null mantidos em schemas de Array/Object</a></li>
</ul>
<p><strong>Outras melhorias:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#searchtostring">RestEndpoint.searchToString()</a> para codificação personalizada de parâmetros de busca</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#url-utilities">Exports getUrlBase, getUrlTokens</a> para construção personalizada de URLs</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#devtools-fix">Correção de vazamento de memória no DevToolsManager</a></li>
</ul>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="null-consistency">Tratamento consistente de null<a href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#null-consistency" class="hash-link" aria-label="Link direto para Tratamento consistente de null" title="Link direto para Tratamento consistente de null" translate="no">​</a></h2>
<p>Valores <code>null</code> agora são mantidos de forma consistente em todos os tipos de schema. Antes, o atalho <code>[]</code> e <a class="" href="https://dataclient.io/pt-BR/rest/api/Array">schema.Array</a>
se comportavam de maneira diferente ao encontrar valores <code>null</code>. <a href="https://github.com/reactive/data-client/pull/2912" target="_blank" rel="noopener noreferrer" class="">#2912</a></p>
<ul>
<li class=""><code>[]</code> e <a class="" href="https://dataclient.io/pt-BR/rest/api/Array">schema.Array</a> agora se comportam de forma idêntica</li>
<li class="">Valores <code>null</code> são mantidos em todos os lugares (já eram mantidos em <a class="" href="https://dataclient.io/pt-BR/rest/guides/relational-data#nesting">Entities aninhadas</a>)</li>
<li class="">Valores <code>undefined</code> continuam sendo filtrados</li>
</ul>
<p>Essa mudança garante um comportamento mais previsível ao trabalhar com APIs que retornam <code>null</code> explicitamente para indicar
ausência de dados, em contraste com <code>undefined</code> para campos faltantes.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="url-utilities">Utilitários de URL<a href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#url-utilities" class="hash-link" aria-label="Link direto para Utilitários de URL" title="Link direto para Utilitários de URL" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="searchtostring">RestEndpoint.searchToString()<a href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#searchtostring" class="hash-link" aria-label="Link direto para RestEndpoint.searchToString()" title="Link direto para RestEndpoint.searchToString()" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#searchToString">RestEndpoint.searchToString()</a> permite a codificação personalizada dos parâmetros de busca.
Isso é especialmente útil para APIs que esperam objetos aninhados complexos nas query strings.
<a href="https://github.com/reactive/data-client/pull/2919" target="_blank" rel="noopener noreferrer" class="">#2919</a></p>
<p>Por exemplo, para codificar objetos complexos usando a biblioteca <a href="https://github.com/ljharb/qs" target="_blank" rel="noopener noreferrer" class="">qs</a>:</p>
<div class="language-typescript codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-typescript codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> RestGenerics </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> qs </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'qs'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyEndpoint</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name constant" style="color:rgb(130, 170, 255)">O</span><span class="token class-name" style="color:rgb(255, 203, 107)"> </span><span class="token class-name keyword" style="color:rgb(255, 203, 107);font-style:italic">extends</span><span class="token class-name" style="color:rgb(255, 203, 107)"> RestGenerics </span><span class="token class-name operator" style="color:rgb(137, 221, 255)">=</span><span class="token class-name" style="color:rgb(255, 203, 107)"> </span><span class="token class-name builtin" style="color:rgb(130, 170, 255)">any</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name constant" style="color:rgb(130, 170, 255)">O</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">searchToString</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">searchParams</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> qs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">stringify</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">searchParams</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="geturlbase">getUrlBase, getUrlTokens<a href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#geturlbase" class="hash-link" aria-label="Link direto para getUrlBase, getUrlTokens" title="Link direto para getUrlBase, getUrlTokens" translate="no">​</a></h3>
<p>Os novos exports <code>getUrlBase</code> e <code>getUrlTokens</code> fornecem os blocos de construção para implementações personalizadas de
<a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#url">RestEndpoint.url()</a>.
<a href="https://github.com/reactive/data-client/pull/2919" target="_blank" rel="noopener noreferrer" class="">#2919</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> getUrlBase</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> getUrlTokens </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Parse path tokens for custom URL logic</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> tokens </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getUrlTokens</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'/users/:id/posts/:postId'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// =&gt; ['id', 'postId']</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Get base URL without path parameters</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> base </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getUrlBase</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'/users/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// =&gt; '/users/'</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="devtools-fix">Correção de memória no DevToolsManager<a href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#devtools-fix" class="hash-link" aria-label="Link direto para Correção de memória no DevToolsManager" title="Link direto para Correção de memória no DevToolsManager" translate="no">​</a></h2>
<p>O buffer de actions do DevToolsManager agora é limitado a 100 entradas, evitando vazamentos de memória em aplicações de longa duração
ou com atualizações frequentes. <a href="https://github.com/reactive/data-client/commit/4e6a39ea2bfdb1390051f12781e899488609e1a8" target="_blank" rel="noopener noreferrer" class=""><code>4e6a39e</code></a></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="migration-guide">Guia de migração<a href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#migration-guide" class="hash-link" aria-label="Link direto para Guia de migração" title="Link direto para Guia de migração" translate="no">​</a></h2>
<p>Esta atualização exige atualizar todas as versões dos pacotes simultaneamente.</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">NPM</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">esm.sh</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> @data-client/react@^0.10.0 @data-client/rest@^0.10.0 @data-client/test@^0.10.0 @data-client/img@^0.10.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">yarn</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.10.0 @data-client/rest@^0.10.0 @data-client/test@^0.10.0 @data-client/img@^0.10.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.10.0 @data-client/rest@^0.10.0 @data-client/test@^0.10.0 @data-client/img@^0.10.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="language-html codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-html codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">importmap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript string-property property">"imports"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/react"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/react@^0.10.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/rest"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/rest@^0.10.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/test"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/test@^0.10.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/img"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/img@^0.10.0"</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="null-arrays">Valores null em arrays<a href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#null-arrays" class="hash-link" aria-label="Link direto para Valores null em arrays" title="Link direto para Valores null em arrays" translate="no">​</a></h3>
<p>Se o seu código dependia de valores <code>null</code> serem filtrados dos arrays, você precisará tratar isso explicitamente:</p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> RestEndpoint </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">User</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  name </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getUsers </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/users'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Array</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// API response: [{ id: '1' }, null, { id: '2' }]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> usersWithoutNull </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useSuspense</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getUsers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Entity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> RestEndpoint </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">User</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  id </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  name </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> getUsers </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/users'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">schema</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">Array</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// API response: [{ id: '1' }, null, { id: '2' }]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> usersWithoutNull </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useSuspense</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getUsers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">filter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Boolean</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<p>Essa mudança se alinha a como as <a class="" href="https://dataclient.io/pt-BR/rest/guides/relational-data#nesting">Entities aninhadas</a> já tratavam valores <code>null</code>,
tornando o comportamento consistente em todos os tipos de schema.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrade-support">Suporte à atualização<a href="https://dataclient.io/pt-BR/blog/2024/02/15/v0.10-null-consistency-url-utilities#upgrade-support" class="hash-link" aria-label="Link direto para Suporte à atualização" title="Link direto para Suporte à atualização" translate="no">​</a></h3>
<p>Como sempre, se tiver qualquer problema ou dúvida, fique à vontade para entrar no nosso <a href="https://discord.gg/wXGV27xm6t" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://img.shields.io/discord/768254430381735967.svg?style=flat-square&amp;colorB=758ED3" alt="Chat" class="img_SS3x"></a> ou <a href="https://github.com/reactive/data-client/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">registrar um bug</a></p>]]></content>
        <author>
            <name>Nathaniel Tucker</name>
            <uri>https://github.com/ntucker</uri>
        </author>
        <category label="Versões" term="Versões"/>
        <category label="REST" term="REST"/>
        <category label="Endpoint" term="Endpoint"/>
        <category label="Schemas" term="Schemas"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.9: DevTools, Resource.extend e limpeza de legado]]></title>
        <id>https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement</id>
        <link href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement"/>
        <updated>2024-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[O Data Client 0.9 traz uma experiência aprimorada no DevTools, Resource.extend() para personalização, novos métodos do controller e remove APIs legadas para uma biblioteca mais limpa e rápida.]]></summary>
        <content type="html"><![CDATA[<p>Esta versão foca na experiência do desenvolvedor, com um <a class="" href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#devtools-button">botão de devtools</a> que aparece em modo de
desenvolvimento, um <a class="" href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#devtools-improvements">histórico do DevTools</a> melhor e novos métodos do controller como
<a class="" href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#controllerexpireall">controller.expireAll()</a> e <a class="" href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#controllerfetchifstale">controller.fetchIfStale()</a>.</p>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/resource#extend">Resource.extend()</a> oferece três maneiras poderosas de personalizar resources - adicionar novos endpoints,
sobrescrever os existentes ou derivar a partir dos endpoints de base.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> UserResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">createResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/users/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">extend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'current'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/users/current'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<center><a class="button button--secondary" href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#migration-guide">Guia de migração</a></center>
<p><strong>Mudanças incompatíveis:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#remove-next-exports">Remoção de todos os exports /next</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#makecacheprovider-removed">makeCacheProvider removido</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#delete-invalidate">Tipo de action DELETE -&gt; INVALIDATE</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#legacy-schema-support-dropped">Suporte a schemas legados descontinuado</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#schema-serializers">Serializadores de Schema devem suportar chamadas de função</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#action-types-prefix">Tipos de action prefixados com 'rdc'</a></li>
</ul>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="resourceextend">Resource.extend() <small>(desde 0.5)</small><a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#resourceextend" class="hash-link" aria-label="Link direto para resourceextend" title="Link direto para resourceextend" translate="no">​</a></h2>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/resource#extend">Resource.extend()</a> oferece três maneiras poderosas de personalizar resources.
<a href="https://github.com/reactive/data-client/commit/51b4b0d188" target="_blank" rel="noopener noreferrer" class="">51b4b0d</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="add-new-endpoints">Adicionar novos endpoints<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#add-new-endpoints" class="hash-link" aria-label="Link direto para Adicionar novos endpoints" title="Link direto para Adicionar novos endpoints" translate="no">​</a></h3>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> UserResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">createResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/users/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> User</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">extend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'current'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/users/current'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="override-existing-endpoints">Sobrescrever endpoints existentes<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#override-existing-endpoints" class="hash-link" aria-label="Link direto para Sobrescrever endpoints existentes" title="Link direto para Sobrescrever endpoints existentes" translate="no">​</a></h3>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> CachedArticleResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> ArticleResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">extend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  getList</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    dataExpiryLength</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">10</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">*</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">60</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">*</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1000</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// 10 minutes</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="derive-from-base-endpoints">Derivar a partir dos endpoints de base<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#derive-from-base-endpoints" class="hash-link" aria-label="Link direto para Derivar a partir dos endpoints de base" title="Link direto para Derivar a partir dos endpoints de base" translate="no">​</a></h3>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> IssueResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">createResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/issues/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Issue</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">extend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Base </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  byRepo</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Base</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">extend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/repos/:owner/:repo/issues'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="controller-methods">Métodos do Controller<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#controller-methods" class="hash-link" aria-label="Link direto para Métodos do Controller" title="Link direto para Métodos do Controller" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="controllerexpireall">controller.expireAll() <small>(desde 0.3)</small><a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#controllerexpireall" class="hash-link" aria-label="Link direto para controllerexpireall" title="Link direto para controllerexpireall" translate="no">​</a></h3>
<p>Marca todas as respostas correspondentes como <em>desatualizadas</em>, disparando um refetch em segundo plano enquanto exibe os dados existentes.
<a href="https://github.com/reactive/data-client/pull/2802" target="_blank" rel="noopener noreferrer" class="">#2802</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Mark all article lists as stale - they'll refetch when rendered</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">expireAll</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">ArticleResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Isso difere de <code>invalidateAll()</code>, que remove os dados por completo. <code>expireAll()</code> continua exibindo
os dados em cache enquanto busca dados novos em segundo plano.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="controllerfetchifstale">controller.fetchIfStale() <small>(desde 0.4)</small><a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#controllerfetchifstale" class="hash-link" aria-label="Link direto para controllerfetchifstale" title="Link direto para controllerfetchifstale" translate="no">​</a></h3>
<p>Busca apenas se os dados forem considerados desatualizados; caso contrário, retorna os dados em cache.
<a href="https://github.com/reactive/data-client/pull/2804" target="_blank" rel="noopener noreferrer" class="">#2804</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Perfect for prefetching - won't overfetch fresh data</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">resolveData</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> owner</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> repo </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetchIfStale</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">IssueResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> owner</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> repo </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="devtools-improvements">Melhorias no DevTools<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#devtools-improvements" class="hash-link" aria-label="Link direto para Melhorias no DevTools" title="Link direto para Melhorias no DevTools" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="devtools-button">Botão do DevTools<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#devtools-button" class="hash-link" aria-label="Link direto para Botão do DevTools" title="Link direto para Botão do DevTools" translate="no">​</a></h3>
<p>Um botão flutuante agora aparece em modo de desenvolvimento para abrir rapidamente a extensão Redux DevTools.
<a href="https://github.com/reactive/data-client/pull/2803" target="_blank" rel="noopener noreferrer" class="">#2803</a></p>
<p>Configure-o ou desabilite-o pela prop <code>devButton</code>:</p>
<div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Disable the button</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">CacheProvider</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">devButton</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript keyword" style="color:rgb(255, 85, 114);font-style:italic">null</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">App</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">CacheProvider</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Position it differently</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">CacheProvider</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">devButton</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">top-right</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">App</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 107)">CacheProvider</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="persistent-history">Histórico persistente<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#persistent-history" class="hash-link" aria-label="Link direto para Histórico persistente" title="Link direto para Histórico persistente" translate="no">​</a></h3>
<p>O DevTools não esquece mais o histórico se não estiver aberto no carregamento da página.
<a href="https://github.com/reactive/data-client/commit/2d2e94126e" target="_blank" rel="noopener noreferrer" class="">2d2e941</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="better-state-tracking">Melhor rastreamento de estado<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#better-state-tracking" class="hash-link" aria-label="Link direto para Melhor rastreamento de estado" title="Link direto para Melhor rastreamento de estado" translate="no">​</a></h3>
<p>Como o React 18 agrupa atualizações em lote, o estado real às vezes pode ser atualizado a partir de várias actions.
Quando o devtools está aberto, um estado sombra reflete com precisão as mudanças de cada action, facilitando a depuração.
<a href="https://github.com/reactive/data-client/commit/c9ca31f3f4" target="_blank" rel="noopener noreferrer" class="">c9ca31f</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="endpoint-properties-visible">Propriedades de Endpoint visíveis<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#endpoint-properties-visible" class="hash-link" aria-label="Link direto para Propriedades de Endpoint visíveis" title="Link direto para Propriedades de Endpoint visíveis" translate="no">​</a></h3>
<p>As propriedades de Endpoint agora ficam totalmente visíveis no inspetor do devtool.
<a href="https://github.com/reactive/data-client/commit/a7da00e82d" target="_blank" rel="noopener noreferrer" class="">a7da00e</a></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="collection-enhancements">Aprimoramentos em Collection<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#collection-enhancements" class="hash-link" aria-label="Link direto para Aprimoramentos em Collection" title="Link direto para Aprimoramentos em Collection" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="formdataargumentfiltering">Filtragem por argumentos FormData <small>(desde 0.4)</small><a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#formdataargumentfiltering" class="hash-link" aria-label="Link direto para formdataargumentfiltering" title="Link direto para formdataargumentfiltering" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collections</a> agora podem filtrar com base em argumentos FormData. <a href="https://github.com/reactive/data-client/commit/f95dbc64d1" target="_blank" rel="noopener noreferrer" class="">f95dbc6</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token plain">ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">getPosts</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">push</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> group</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'react'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">FormData</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">e</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">currentTarget</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Se o FormData contiver um campo <code>author</code>, o item recém-criado será adicionado corretamente às
collections filtradas por esse autor.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="paginationfield">paginationField <small>(desde 0.7)</small><a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#paginationfield" class="hash-link" aria-label="Link direto para paginationfield" title="Link direto para paginationfield" translate="no">​</a></h3>
<p>Use <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#paginationfield">paginationField</a> para um suporte fácil à paginação.
<a href="https://github.com/reactive/data-client/commit/c8c5575e5a" target="_blank" rel="noopener noreferrer" class="">c8c557</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> TodoResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">createResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/todos/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  paginationField</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'page'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Fetches page 2 and appends to the collection</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">TodoResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">getPage</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> page</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'2'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="other-improvements">Outras melhorias<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#other-improvements" class="hash-link" aria-label="Link direto para Outras melhorias" title="Link direto para Outras melhorias" translate="no">​</a></h2>
<ul>
<li class="">Adição de <code>className</code> ao ErrorBoundary e <code>errorClassName</code> ao <a class="" href="https://dataclient.io/pt-BR/docs/api/AsyncBoundary">AsyncBoundary</a> <a href="https://github.com/reactive/data-client/pull/2785" target="_blank" rel="noopener noreferrer" class="">#2785</a></li>
<li class="">Novo export <code>getDefaultManagers()</code> para controle explícito dos managers <a href="https://github.com/reactive/data-client/pull/2791" target="_blank" rel="noopener noreferrer" class="">#2791</a></li>
<li class="">Substituição de BackupBoundary por UniversalSuspense + BackupLoading <a href="https://github.com/reactive/data-client/pull/2803" target="_blank" rel="noopener noreferrer" class="">#2803</a></li>
<li class="">Entity.process() recebe os <code>args</code> do endpoint como quarto parâmetro <em>(desde 0.7)</em> <a href="https://github.com/reactive/data-client/commit/a8936f5e6d" target="_blank" rel="noopener noreferrer" class="">a8936f5</a></li>
<li class=""><code>nonFilterArgumentKeys</code> para Collection, para excluir parâmetros de ordenação da filtragem <em>(desde 0.7)</em> <a href="https://github.com/reactive/data-client/commit/318df89bf7" target="_blank" rel="noopener noreferrer" class="">318df89</a></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="migration-guide">Guia de migração<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#migration-guide" class="hash-link" aria-label="Link direto para Guia de migração" title="Link direto para Guia de migração" translate="no">​</a></h2>
<p>Esta atualização exige atualizar todas as versões dos pacotes simultaneamente.</p>
<div class="theme-tabs-container tabs-container tabList_J5MA"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">NPM</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">esm.sh</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> @data-client/react@^0.9.0 @data-client/rest@^0.9.0 @data-client/test@^0.9.0 @data-client/img@^0.9.0 @data-client/hooks@^0.9.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">yarn</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.9.0 @data-client/rest@^0.9.0 @data-client/test@^0.9.0 @data-client/img@^0.9.0 @data-client/hooks@^0.9.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> @data-client/react@^0.9.0 @data-client/rest@^0.9.0 @data-client/test@^0.9.0 @data-client/img@^0.9.0 @data-client/hooks@^0.9.0</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><div class="language-html codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-html codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">importmap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript string-property property">"imports"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/react"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/react@^0.9.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/rest"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/rest@^0.9.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/test"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/test@^0.9.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/img"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/img@^0.9.0"</span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">    </span><span class="token script language-javascript string-property property">"@data-client/hooks"</span><span class="token script language-javascript operator" style="color:rgb(137, 221, 255)">:</span><span class="token script language-javascript"> </span><span class="token script language-javascript string" style="color:rgb(195, 232, 141)">"https://esm.sh/@data-client/hooks@^0.9.0"</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript">  </span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token script language-javascript"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token script language-javascript"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">script</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><br></div></code></pre></div></div></div></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="remove-next-exports">Remoção dos exports /next<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#remove-next-exports" class="hash-link" aria-label="Link direto para Remoção dos exports /next" title="Link direto para Remoção dos exports /next" translate="no">​</a></h3>
<p>Todos os exports de subcaminho <code>/next</code> foram removidos. Os recursos que antes estavam em <code>/next</code> agora são
os exports padrão. <a href="https://github.com/reactive/data-client/commit/f65cf832f0" target="_blank" rel="noopener noreferrer" class="">f65cf83</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> useController </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react/next'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> useController </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="makecacheprovider-removed">makeCacheProvider removido<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#makecacheprovider-removed" class="hash-link" aria-label="Link direto para makeCacheProvider removido" title="Link direto para makeCacheProvider removido" translate="no">​</a></h3>
<p>Use o componente provider diretamente com makeRenderDataClient.
<a href="https://github.com/reactive/data-client/pull/2787" target="_blank" rel="noopener noreferrer" class="">#2787</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> makeCacheProvider </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> renderDataClient </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">makeRenderDataClient</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">makeCacheProvider</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-tsx codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-tsx codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">CacheProvider</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> renderDataClient </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">makeRenderDataClient</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">CacheProvider</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="delete-invalidate">Tipo de action DELETE -&gt; INVALIDATE<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#delete-invalidate" class="hash-link" aria-label="Link direto para Tipo de action DELETE -> INVALIDATE" title="Link direto para Tipo de action DELETE -> INVALIDATE" translate="no">​</a></h3>
<p>O tipo de action DELETE foi renomeado para INVALIDATE por clareza.
<a href="https://github.com/reactive/data-client/pull/2784" target="_blank" rel="noopener noreferrer" class="">#2784</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">DELETE_TYPE</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">INVALIDATE_TYPE</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="legacy-schema-support-dropped">Suporte a schemas legados descontinuado<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#legacy-schema-support-dropped" class="hash-link" aria-label="Link direto para Suporte a schemas legados descontinuado" title="Link direto para Suporte a schemas legados descontinuado" translate="no">​</a></h3>
<p>Todo o suporte a schemas legados foi removido. Certifique-se de estar usando a classe
Entity atual. <a href="https://github.com/reactive/data-client/pull/2784" target="_blank" rel="noopener noreferrer" class="">#2784</a></p>
<ul>
<li class=""><code>entity.expiresAt</code> removido</li>
<li class="">Todas as sobrescritas de Entity para compatibilidade retroativa foram removidas</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="schema-serializers">Serializadores de Schema devem suportar chamadas de função<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#schema-serializers" class="hash-link" aria-label="Link direto para Serializadores de Schema devem suportar chamadas de função" title="Link direto para Serializadores de Schema devem suportar chamadas de função" translate="no">​</a></h3>
<p>Os <a class="" href="https://dataclient.io/pt-BR/rest/guides/network-transform#deserializing-fields">serializadores de Schema</a> agora devem suportar
chamadas de função. <code>Date</code> não funciona mais diretamente. <a href="https://github.com/reactive/data-client/pull/2795" target="_blank" rel="noopener noreferrer" class="">#2795</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyEntity</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  createdAt </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Date</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> schema </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    createdAt</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Date</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyEntity</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  createdAt </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Date</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> schema </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">createdAt</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">iso</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Date</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">iso</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<p>Como alternativa, use Temporal:</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> Temporal </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'temporal-polyfill'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MyEntity</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Entity</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  createdAt </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> Temporal</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">Instant</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fromEpochSeconds</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> schema </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    createdAt</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Temporal</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">Instant</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">from</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="action-types-prefix">Tipos de action prefixados com 'rdc'<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#action-types-prefix" class="hash-link" aria-label="Link direto para Tipos de action prefixados com 'rdc'" title="Link direto para Tipos de action prefixados com 'rdc'" translate="no">​</a></h3>
<p>Todos os tipos de action agora são prefixados com 'rdc' para um melhor namespacing.
<a href="https://github.com/reactive/data-client/pull/2781" target="_blank" rel="noopener noreferrer" class="">#2781</a></p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="receive---set-action-names">Nomes de action receive -&gt; set<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#receive---set-action-names" class="hash-link" aria-label="Link direto para Nomes de action receive -> set" title="Link direto para Nomes de action receive -> set" translate="no">​</a></h3>
<p>Todos os nomes de action 'receive' foram renomeados para 'set'.
<a href="https://github.com/reactive/data-client/pull/2782" target="_blank" rel="noopener noreferrer" class="">#2782</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> ReceiveAction</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">RECEIVE_TYPE</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">receive</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">endpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> response</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> SetAction</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(130, 170, 255)">SET_TYPE</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">set</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">endpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> response</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="middleware-api-simplified">API de Middleware simplificada<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#middleware-api-simplified" class="hash-link" aria-label="Link direto para API de Middleware simplificada" title="Link direto para API de Middleware simplificada" translate="no">​</a></h3>
<p>O Middleware não recebe mais <code>controller</code> como uma propriedade desestruturada - ele recebe
o controller diretamente. <a href="https://github.com/reactive/data-client/pull/2786" target="_blank" rel="noopener noreferrer" class="">#2786</a></p>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">LoggingManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  getMiddleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Middleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> controller </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'before'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'after'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">LoggingManager</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">implements</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">Manager</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line theme-code-block-highlighted-line" style="color:#bfc7d5"><span class="token plain">  getMiddleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Middleware </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> controller </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> next </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> action </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'before'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">next</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'after'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> controller</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">cleanup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="getdefaultmanagers">getDefaultManagers()<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#getdefaultmanagers" class="hash-link" aria-label="Link direto para getDefaultManagers()" title="Link direto para getDefaultManagers()" translate="no">​</a></h3>
<p>Os elementos CacheProvider não compartilham mais os managers padrão. Use <code>getDefaultManagers()</code> para controle explícito.
<a href="https://github.com/reactive/data-client/pull/2791" target="_blank" rel="noopener noreferrer" class="">#2791</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> getDefaultManagers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> CacheProvider </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> managers </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getDefaultManagers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token plain">CacheProvider managers</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">managers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token plain">App </span><span class="token operator" style="color:rgb(137, 221, 255)">/</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token operator" style="color:rgb(137, 221, 255)">/</span><span class="token plain">CacheProvider</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrade-support">Suporte à atualização<a href="https://dataclient.io/pt-BR/blog/2024/01/15/v0.9-release-announcement#upgrade-support" class="hash-link" aria-label="Link direto para Suporte à atualização" title="Link direto para Suporte à atualização" translate="no">​</a></h3>
<p>Como sempre, se tiver qualquer problema ou dúvida, fique à vontade para entrar no nosso <a href="https://discord.gg/wXGV27xm6t" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://img.shields.io/discord/768254430381735967.svg?style=flat-square&amp;colorB=758ED3" alt="Chat" class="img_SS3x"></a> ou <a href="https://github.com/reactive/data-client/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">registrar um bug</a></p>]]></content>
        <author>
            <name>Nathaniel Tucker</name>
            <uri>https://github.com/ntucker</uri>
        </author>
        <category label="Versões" term="Versões"/>
        <category label="REST" term="REST"/>
        <category label="Resources" term="Resources"/>
        <category label="Endpoint" term="Endpoint"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.2 Controller.fetch, getHeaders assíncrono, Collections]]></title>
        <id>https://dataclient.io/pt-BR/blog/2023/07/04/v0.2-release-announcement</id>
        <link href="https://dataclient.io/pt-BR/blog/2023/07/04/v0.2-release-announcement"/>
        <updated>2023-07-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A 0.2 do Data Client torna a mutação de listas muito mais fácil, já que schemas Collection agora são o padrão para Resources]]></summary>
        <content type="html"><![CDATA[<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collections</a> permitem estender Arrays e Objects com facilidade
fazendo <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection#push">push</a> ou <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection#unshift">unshift</a> de novos
membros. O nome vem das <a href="https://backbonejs.org/#Collection" target="_blank" rel="noopener noreferrer" class="">Collections do Backbone</a>.</p>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collections</a> agora são o schema padrão de <a class="" href="https://dataclient.io/pt-BR/rest/api/resource#getlist">Resource.getList</a>.</p>
<div data-playground="true" class="playgroundQueryContainer_vBqa"><div class="playgroundContainer_sLUA row_YGZs"><div class="playgroundTextEdit_rt2K withCover_yq1Z"><div class="editorBody_JtfR"><div class="editorDocs_INVk"><div class="playgroundHeader_Zx4K noupper_WDCF tabControls_trxh"><div class="tabs_m54V" role="tablist" aria-orientation="horizontal"><div role="tab" aria-selected="false" tabindex="-1" class="tab_bTGw">TodoResource</div><div role="tab" aria-selected="false" tabindex="-1" class="tab_bTGw">TodoItem</div><div role="tab" aria-selected="true" tabindex="0" class="tab_bTGw selected_QXZk">CreateTodo</div><div role="tab" aria-selected="false" tabindex="-1" class="tab_bTGw">TodoList</div></div></div><div class="playgroundEditor_lYwu hidden_Hh8i"></div><div class="playgroundEditor_lYwu hidden_Hh8i"></div><div class="playgroundEditor_lYwu"><div><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#bfc7d5;background-color:transparent" spellcheck="false"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> useController </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">TodoResource</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'./TodoResource'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5">
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">CreateTodo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> userId </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> userId</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">number</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> ctrl </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useController</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">handleKeyDown</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> e </span><span class="token arrow operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">e</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">key</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Enter'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token maybe-class-name">TodoResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">getList</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">push</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        userId</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        title</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> e</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">currentTarget</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token known-class-name class-name" style="color:rgb(255, 203, 107)">Math</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">random</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">      e</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">currentTarget</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">value</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">className</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">listItem nogap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">label</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">input</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">checkbox</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">new</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">checked</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">false</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">disabled</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">input</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">text</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">onKeyDown</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(255, 85, 114)">handleKeyDown</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">label</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span>
</span></pre></div></div><div class="playgroundEditor_lYwu hidden_Hh8i"></div></div><div class="storeHost_N0SU"></div><button type="button" class="clean-btn swap_P7aB storeBadge_yrOO" title="Mostrar o store" aria-pressed="false" data-store-toggle="true"><span aria-hidden="false"><span class="storeBadgeDot_pVWi"></span>Store</span><span aria-hidden="true"><svg class="storeBadgeCode_DfYa" viewBox="0 0 24 24" width="1.15em" height="1.15em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m8 7-5 5 5 5M16 7l5 5-5 5M14 4l-4 16"></path></svg>Código</span></button></div></div><div class="previewWrapper_edd2"><div class="playgroundHeader_Zx4K previewHeader_MW_M"><span class="liveLabel_MHnJ"><span class="liveLabelText_k6qc">Pré-visualização</span></span><span class="routerSlot_CTii"></span><span class="previewControls_oxCt"><button type="button" class="clean-btn headerButton_h2KM fixturesToggle_OTR0" title="Fixtures" aria-label="Fixtures" aria-expanded="false" aria-controls="_R_22qllq9_"><svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 20V4"></path><path d="m3 8 4-4 4 4"></path><path d="M17 4v16"></path><path d="m21 16-4 4-4-4"></path></svg></button><button type="button" class="clean-btn headerButton_h2KM storeHeaderToggle_ToEw" title="Mostrar o store" aria-label="Store" aria-pressed="false" data-store-toggle="true" disabled=""><svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><ellipse cx="12" cy="5" rx="8" ry="3"></ellipse><path d="M4 5v14c0 1.66 3.58 3 8 3s8-1.34 8-3V5"></path><path d="M4 12c0 1.66 3.58 3 8 3s8-1.34 8-3"></path></svg></button></span></div><div class="fixturesAnchor_fieO"><div id="_R_22qllq9_" class="fixturesPopover_bQwj"><div class="fixtureBlock_mpRK"><div class="fixture_Arp7"><button type="button" class="clean-btn fixtureToggle_W1bY" aria-expanded="false"><span class="arrow_tivA right_vs_C" aria-hidden="true">▶</span><span class="method_pU0d">GET</span><span class="fixturePath_Tuwy">/users</span><span class="fixtureHint_J1_b" aria-hidden="true"><span class="fixtureFn_HVDB">ƒ</span> <!-- -->→ (await UserResource.getList(...args)).slice(0, 3)</span></button><div class="unfold_Z0ry" inert="" aria-hidden="true"><div class="unfoldBody_qH0e"></div></div></div><div class="fixture_Arp7"><button type="button" class="clean-btn fixtureToggle_W1bY" aria-expanded="false"><span class="arrow_tivA right_vs_C" aria-hidden="true">▶</span><span class="method_pU0d">GET</span><span class="fixturePath_Tuwy">/todos</span><span class="fixtureHint_J1_b" aria-hidden="true"><span class="fixtureFn_HVDB">ƒ</span> <!-- -->→ (await TodoResource.getList(...args)).slice(0, 7)</span></button><div class="unfold_Z0ry" inert="" aria-hidden="true"><div class="unfoldBody_qH0e"></div></div></div><div class="fixture_Arp7"><button type="button" class="clean-btn fixtureToggle_W1bY" aria-expanded="false"><span class="arrow_tivA right_vs_C" aria-hidden="true">▶</span><span class="method_pU0d">PATCH</span><span class="fixturePath_Tuwy">/todos/:id</span><span class="fixtureHint_J1_b" aria-hidden="true"><span class="fixtureFn_HVDB">ƒ</span> <!-- -->→ { ...(await TodoResource.partialUpdate(...args)), id: args?.[0]?.id }</span></button><div class="unfold_Z0ry" inert="" aria-hidden="true"><div class="unfoldBody_qH0e"></div></div></div><div class="fixture_Arp7"><button type="button" class="clean-btn fixtureToggle_W1bY" aria-expanded="false"><span class="arrow_tivA right_vs_C" aria-hidden="true">▶</span><span class="method_pU0d">POST</span><span class="fixturePath_Tuwy">/todos</span><span class="fixtureHint_J1_b" aria-hidden="true"><span class="fixtureFn_HVDB">ƒ</span> <!-- -->→ { ...(await TodoResource.getList.push(...args)), id: randomId() }</span></button><div class="unfold_Z0ry" inert="" aria-hidden="true"><div class="unfoldBody_qH0e"></div></div></div></div></div></div><div class="playgroundResult_tefG"><div class="playgroundPreview_rk9R"></div></div></div></div></div>
<p>Atualizar é bem simples, pois <code>@data-client/rest/next</code> e <code>@data-client/react/next</code> foram introduzidos
para permitir a adoção incremental das novas APIs alteradas neste lançamento. Isso torna a atualização em si uma simples
renomeação de imports.</p>
<p>Outros destaques incluem</p>
<ul>
<li class=""><code>@data-client/rest</code>
<ul>
<li class=""><a href="https://github.com/reactive/data-client/pull/2542" target="_blank" rel="noopener noreferrer" class="">RestEndpoint.getHeaders assíncrono</a></li>
</ul>
</li>
<li class=""><code>@data-client/react</code>
<ul>
<li class=""><a href="https://github.com/reactive/data-client/pull/2545" target="_blank" rel="noopener noreferrer" class="">O valor de retorno de Controller.fetch() é desnormalizado a partir do schema</a></li>
<li class=""><a href="https://github.com/reactive/data-client/pull/2690" target="_blank" rel="noopener noreferrer" class="">Atualizações nos tipos de ação dos Managers</a></li>
</ul>
</li>
</ul>
<p>Para todos os detalhes, <a class="" href="https://dataclient.io/pt-BR/blog/2023/07/04/v0.2-release-announcement#data-clientreact-02">continue lendo</a>:</p>
<!-- -->
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="data-clientreact-02">@data-client/react 0.2<a href="https://dataclient.io/pt-BR/blog/2023/07/04/v0.2-release-announcement#data-clientreact-02" class="hash-link" aria-label="Link direto para @data-client/react 0.2" title="Link direto para @data-client/react 0.2" translate="no">​</a></h3>
<p><a href="https://github.com/reactive/data-client/releases/tag/%40data-client%2Freact%400.2.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/reactive/data-client/releases/tag/%40data-client%2Freact%400.2.0</a></p>
<p>A atualização pode ser feita gradualmente, já que todas as mudanças foram lançadas inicialmente em <code>/next</code>.</p>
<ol>
<li class="">
<p>Migre incrementalmente para as novas versões importando de <code>/next</code></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> useController </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/react/next'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
</li>
<li class="">
<p>Atualize para a v0.2 - v0.4 (todas compatíveis).</p>
<div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> @data-client/rest@0.4.3</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div>
</li>
<li class="">
<p>Os imports podem ser atualizados incrementalmente após a atualização. <code>/next</code> exporta o mesmo que o nível superior.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> useController </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
</li>
</ol>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="changes">Mudanças<a href="https://dataclient.io/pt-BR/blog/2023/07/04/v0.2-release-announcement#changes" class="hash-link" aria-label="Link direto para Mudanças" title="Link direto para Mudanças" translate="no">​</a></h4>
<ul>
<li class="">
<p><strong>Controller.fetch()</strong>: <a href="https://github.com/reactive/data-client/pull/2545" target="_blank" rel="noopener noreferrer" class="">2545</a> Controller.fetch() retorna a forma desnormalizada quando o Endpoint tem um Schema</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">handleChange</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> e </span><span class="token operator" style="color:rgb(137, 221, 255)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> todo </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> ctrl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    TodoResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">partialUpdate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> id</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">id </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> completed</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> e</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">currentTarget</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">checked </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// todo is Todo, we can use all its members and be type-safe</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token builtin" style="color:rgb(130, 170, 255)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">pk</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">title</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
</li>
<li class="">
<p><strong>NetworkManager</strong>: a interface do NetworkManager mudou para suportar apenas as novas ações <a href="https://github.com/reactive/data-client/pull/2690" target="_blank" rel="noopener noreferrer" class="">2690</a></p>
</li>
<li class="">
<p>Interfaces de <strong>SubscriptionManager/PollingSubscription</strong> simplificadas com base nas novas ações <a href="https://github.com/reactive/data-client/pull/2690" target="_blank" rel="noopener noreferrer" class="">2690</a></p>
</li>
</ul>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="removals-of-deprecated-items">Remoções de itens descontinuados<a href="https://dataclient.io/pt-BR/blog/2023/07/04/v0.2-release-announcement#removals-of-deprecated-items" class="hash-link" aria-label="Link direto para Remoções de itens descontinuados" title="Link direto para Remoções de itens descontinuados" translate="no">​</a></h4>
<ul>
<li class=""><a href="https://github.com/reactive/data-client/pull/2691" target="_blank" rel="noopener noreferrer" class="">2691</a>: Remove DispatchContext, DenormalizeCacheContext</li>
</ul>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="deprecations">Descontinuações<a href="https://dataclient.io/pt-BR/blog/2023/07/04/v0.2-release-announcement#deprecations" class="hash-link" aria-label="Link direto para Descontinuações" title="Link direto para Descontinuações" translate="no">​</a></h4>
<ul>
<li class="">controller.receive, controller.receiveError <a href="https://github.com/reactive/data-client/pull/2690" target="_blank" rel="noopener noreferrer" class="">2690</a></li>
<li class="">RECEIVE_TYPE <a href="https://github.com/reactive/data-client/pull/2690" target="_blank" rel="noopener noreferrer" class="">2690</a></li>
<li class="">MiddlewareAPI.controller (MiddlewareAPI é simplesmente o próprio controller) <a href="https://github.com/reactive/data-client/pull/2690" target="_blank" rel="noopener noreferrer" class="">2690</a>
<ul>
<li class=""><code>({controller}) =&gt; {}</code> -&gt; <code>(controller) =&gt; {}</code></li>
</ul>
</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="data-clientrest-02">@data-client/rest 0.2<a href="https://dataclient.io/pt-BR/blog/2023/07/04/v0.2-release-announcement#data-clientrest-02" class="hash-link" aria-label="Link direto para @data-client/rest 0.2" title="Link direto para @data-client/rest 0.2" translate="no">​</a></h3>
<p><a href="https://github.com/reactive/data-client/releases/tag/%40data-client%2Frest%400.2.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/reactive/data-client/releases/tag/%40data-client%2Frest%400.2.0</a></p>
<p>A atualização pode ser feita gradualmente, já que todas as mudanças foram lançadas inicialmente em <code>/next</code>.</p>
<ol>
<li class="">
<p><a href="https://github.com/reactive/data-client/pull/2606/files" target="_blank" rel="noopener noreferrer" class="">Migre incrementalmente para as novas versões</a> importando de <code>/next</code></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  createResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  GetEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  MutateEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest/next'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Veja as <a href="https://github.com/reactive/data-client/pull/2606/files" target="_blank" rel="noopener noreferrer" class="">migrações</a> do diretório /examples como exemplo</p>
</li>
<li class="">
<p>Atualize para a v0.2-0.7 (todas compatíveis).</p>
<div class="terminal_yWbS"><div class="language-bash codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-bash codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line command_MhHc" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(191, 199, 213)">--save</span><span class="token plain"> @data-client/rest@0.7.6</span><br></div></code></pre></div></div><span role="tooltip" class="tip_wqpZ tip_cCYE">Execute no seu terminal</span></div>
</li>
<li class="">
<p>Os imports podem ser atualizados incrementalmente após a atualização. <code>/next</code> exporta o mesmo que o nível superior.</p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> RestEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> createResource </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
</li>
</ol>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="changes-1">Mudanças<a href="https://dataclient.io/pt-BR/blog/2023/07/04/v0.2-release-announcement#changes-1" class="hash-link" aria-label="Link direto para Mudanças" title="Link direto para Mudanças" translate="no">​</a></h4>
<ul>
<li class="">
<p>getRequestInit e getHeaders do RestEndpoint podem opcionalmente retornar uma promise <a href="https://github.com/reactive/data-client/pull/2542" target="_blank" rel="noopener noreferrer" class="">2542</a></p>
<div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> RestEndpoint </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'@data-client/rest/next'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">default</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">AuthdEndpoint</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name" style="color:rgb(255, 203, 107)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token class-name" style="color:rgb(255, 203, 107)">  </span><span class="token class-name constant" style="color:rgb(130, 170, 255)">O</span><span class="token class-name" style="color:rgb(255, 203, 107)"> </span><span class="token class-name keyword" style="color:rgb(255, 203, 107);font-style:italic">extends</span><span class="token class-name" style="color:rgb(255, 203, 107)"> RestGenerics </span><span class="token class-name operator" style="color:rgb(137, 221, 255)">=</span><span class="token class-name" style="color:rgb(255, 203, 107)"> </span><span class="token class-name builtin" style="color:rgb(130, 170, 255)">any</span><span class="token class-name punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token class-name" style="color:rgb(255, 203, 107)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token class-name" style="color:rgb(255, 203, 107)"></span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name constant" style="color:rgb(130, 170, 255)">O</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">declare</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">static</span><span class="token plain"> accessToken</span><span class="token operator" style="color:rgb(137, 221, 255)">?</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getHeaders</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">headers</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> HeadersInit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token plain">headers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token string-property property">'Access-Token'</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getOrFetchToken</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">as</span><span class="token plain"> HeadersInit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">export</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">const</span><span class="token plain"> TodoResource </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">createResource</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  urlPrefix</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'https://jsonplaceholder.typicode.com'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  path</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'/todos/:id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  schema</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> Todo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  Endpoint</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> AuthdEndpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>BREAKING: Chamar super.getRequestInit() retornará uma promise - então você precisa resolvê-la:</p>
</li>
</ul>
<figure class="figure_HN5N"><div class="grid_iD3H wrap_ES0G"><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">Before</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">AuthdEndpoint</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name" style="color:rgb(255, 203, 107)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token class-name" style="color:rgb(255, 203, 107)">  </span><span class="token class-name constant" style="color:rgb(130, 170, 255)">O</span><span class="token class-name" style="color:rgb(255, 203, 107)"> </span><span class="token class-name keyword" style="color:rgb(255, 203, 107);font-style:italic">extends</span><span class="token class-name" style="color:rgb(255, 203, 107)"> RestGenerics </span><span class="token class-name operator" style="color:rgb(137, 221, 255)">=</span><span class="token class-name" style="color:rgb(255, 203, 107)"> </span><span class="token class-name builtin" style="color:rgb(130, 170, 255)">any</span><span class="token class-name punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token class-name" style="color:rgb(255, 203, 107)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token class-name" style="color:rgb(255, 203, 107)"></span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name constant" style="color:rgb(130, 170, 255)">O</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">getRequestInit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">body</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> RequestInit </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token keyword" style="font-style:italic">super</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getRequestInit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">body</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      credentials</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'same-origin'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div><div class="language-ts codeBlockContainer_mQmQ theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:transparent"><div class="codeBlockTitle_kY6l">After</div><div class="codeBlockContent_t_Hd"><pre tabindex="0" class="prism-code language-ts codeBlock_RMoD thin-scrollbar" style="color:#bfc7d5;background-color:transparent"><code class="codeBlockLines_AclH"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">AuthdEndpoint</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name" style="color:rgb(255, 203, 107)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token class-name" style="color:rgb(255, 203, 107)">  </span><span class="token class-name constant" style="color:rgb(130, 170, 255)">O</span><span class="token class-name" style="color:rgb(255, 203, 107)"> </span><span class="token class-name keyword" style="color:rgb(255, 203, 107);font-style:italic">extends</span><span class="token class-name" style="color:rgb(255, 203, 107)"> RestGenerics </span><span class="token class-name operator" style="color:rgb(137, 221, 255)">=</span><span class="token class-name" style="color:rgb(255, 203, 107)"> </span><span class="token class-name builtin" style="color:rgb(130, 170, 255)">any</span><span class="token class-name punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token class-name" style="color:rgb(255, 203, 107)"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token class-name" style="color:rgb(255, 203, 107)"></span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">extends</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">RestEndpoint</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token class-name constant" style="color:rgb(130, 170, 255)">O</span><span class="token class-name operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">async</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">getRequestInit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">body</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">any</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">Promise</span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token plain">RequestInit</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token operator" style="color:rgb(137, 221, 255)">...</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">super</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">getRequestInit</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">body</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      credentials</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'same-origin'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div></div></figure>
<ul>
<li class="">createResource().getList usa uma Collection, à qual .create adiciona ao final <a href="https://github.com/reactive/data-client/pull/2593" target="_blank" rel="noopener noreferrer" class="">2593</a>
<ul>
<li class=""><code>Resource.create</code> adicionará automaticamente à lista<!-- -->
<ul>
<li class=""><code>Resource.getList.push</code> é idêntico a <code>Resource.create</code></li>
</ul>
</li>
<li class=""><strong>Remova</strong> qualquer <code>Endpoint.update</code>, pois não é necessário e não funcionará</li>
</ul>
</li>
<li class="">Os parâmetros de <code>GetEndpoint</code> e <code>MutateEndpoint</code> mudaram para o que eram <code>NewGetEndpoint</code> e <code>NewMutateEndpoint</code>.</li>
<li class="">Os genéricos de createResource() mudaram para <code>O extends ResourceGenerics</code>. Isso permite personalizar o tipo do Resource com body e searchParams <a href="https://github.com/reactive/data-client/pull/2593" target="_blank" rel="noopener noreferrer" class="">2593</a>
<ul>
<li class=""><code>createGithubResource&lt;U extends string, S extends Schema&gt;</code> -&gt; <code>createGithubResource&lt;O extends ResourceGenerics&gt;</code></li>
</ul>
</li>
</ul>
<p><a href="https://github.com/reactive/data-client/pull/2692" target="_blank" rel="noopener noreferrer" class="">PR #2692 que promove o /next</a></p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="removals-of-deprecated-items-1">Remoções de itens descontinuados<a href="https://dataclient.io/pt-BR/blog/2023/07/04/v0.2-release-announcement#removals-of-deprecated-items-1" class="hash-link" aria-label="Link direto para Remoções de itens descontinuados" title="Link direto para Remoções de itens descontinuados" translate="no">​</a></h4>
<ul>
<li class=""><a href="https://github.com/reactive/data-client/pull/2690" target="_blank" rel="noopener noreferrer" class="">2690</a>: Removido o descontinuado <code>Endpoint.optimisticUpdate</code> -&gt; use <code>Endpoint.getOptimisticResponse</code></li>
<li class=""><a href="https://github.com/reactive/data-client/pull/2688" target="_blank" rel="noopener noreferrer" class="">2688</a> Remove a compatibilidade com <code>FetchShape</code>.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrade-support">Suporte à atualização<a href="https://dataclient.io/pt-BR/blog/2023/07/04/v0.2-release-announcement#upgrade-support" class="hash-link" aria-label="Link direto para Suporte à atualização" title="Link direto para Suporte à atualização" translate="no">​</a></h3>
<p>Como sempre, se você tiver qualquer problema ou dúvida, fique à vontade para entrar no nosso <a href="https://discord.gg/wXGV27xm6t" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" src="https://img.shields.io/discord/768254430381735967.svg?style=flat-square&amp;colorB=758ED3" alt="Chat" class="img_SS3x"></a> ou <a href="https://github.com/reactive/data-client/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">abrir um bug</a></p>]]></content>
        <author>
            <name>Nathaniel Tucker</name>
            <uri>https://github.com/ntucker</uri>
        </author>
        <category label="Versões" term="Versões"/>
        <category label="REST" term="REST"/>
        <category label="Resources" term="Resources"/>
        <category label="Endpoint" term="Endpoint"/>
        <category label="Collections" term="Collections"/>
    </entry>
</feed>