<?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-06T00: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[Data Client para Coding Agents]]></title>
        <id>https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents</id>
        <link href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents"/>
        <updated>2026-10-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Agent skills, um plugin do Claude Code, depuração com Chrome DevTools MCP e llms.txt ajudam coding agents a escrever, depurar e atualizar apps com Data Client]]></summary>
        <content type="html"><![CDATA[<p>Coding agents escrevem muito código com Data Client hoje, e escrevem melhor quando têm a documentação e os
fluxos de trabalho atuais em vez de adivinhar a partir de versões antigas. Este ciclo de lançamento torna isso mais fácil de configurar para qualquer agent.</p>
<p><strong>Novidades:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#claude-plugin">Plugin do Claude Code</a> - <code>claude plugin install react@data-client</code> instala as skills do seu framework</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#vue-skills">Skills de Vue</a> - Projetos Vue recebem composables e testes de Vue, não hooks de React</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#llms-txt">llms.txt</a> - Qualquer agent pode ler a documentação como markdown, e cada página indica onde procurar</li>
</ul>
<p><strong>Também disponível:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#skills">Agent skills</a> - Defina APIs REST, projete schemas, escreva Managers e teste; o <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#setup">/data-client-setup</a> agora instala só as que você precisa, e elas são <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#generated-references">geradas a partir desta documentação</a></li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#debugging">Chrome DevTools MCP</a> - Agents inspecionam a store do seu app em execução, ou usam o Expo MCP para React Native</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#upgrades">Skills de atualização</a> - Skills de migração atualizam seu código, inclusive o que os codemods não conseguem</li>
</ul>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="setup">Primeiros passos<a href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#setup" class="hash-link" aria-label="Link direto para Primeiros passos" title="Link direto para Primeiros passos" translate="no">​</a></h2>
<p>Instale a skill <a href="https://skills.sh/reactive/data-client/data-client-setup" target="_blank" rel="noopener noreferrer" class="">/data-client-setup</a> e execute-a. Ela
detecta React ou Vue e o estilo da sua API (REST, GraphQL ou personalizada), instala as skills que o seu projeto precisa e configura o
Data Client. Para REST, ela delega para
<a href="https://skills.sh/reactive/data-client/data-client-rest-setup" target="_blank" rel="noopener noreferrer" class="">data-client-rest-setup</a>, que migra chamadas <code>fetch</code> ou
axios existentes para endpoints (<a href="https://github.com/reactive/data-client/pull/4153" target="_blank" rel="noopener noreferrer" class="">#4153</a>).</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">Skills</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">OpenSkills</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Claude Code</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><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" 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-setup</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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-setup</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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><br></div><div class="token-line" 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"> core@data-client</span><br></div></code></pre></div></div></div></div></div>
<p><a class="" href="https://dataclient.io/pt-BR/docs/getting-started/agent-skills">Agent Skills</a> lista todas as skills e como instalá-las todas de antemão.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="claude-plugin">Plugin do Claude Code<a href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#claude-plugin" class="hash-link" aria-label="Link direto para Plugin do Claude Code" title="Link direto para Plugin do Claude Code" translate="no">​</a></h2>
<p>O repositório do Data Client é um marketplace de plugins do Claude Code. O plugin <code>core</code> contém as skills de setup, REST, GraphQL, schema e
Manager; os plugins <code>react</code> e <code>vue</code> adicionam as skills do seu framework e trazem o <code>core</code> junto; e o plugin <code>migrations</code>
adiciona as skills de atualização (<a href="https://github.com/reactive/data-client/pull/4153" target="_blank" rel="noopener noreferrer" class="">#4153</a>). A página
<a class="" href="https://dataclient.io/pt-BR/docs/getting-started/agent-skills">Agent Skills</a> mostra a mesma instalação com a CLI de skills e o OpenSkills.</p>
<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" 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><br></div><div class="token-line" 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"> react@data-client</span><br></div></code></pre></div></div>
<p>Use <code>vue@data-client</code> para Vue, <code>core@data-client</code> para nenhum dos dois, e adicione <code>migrations@data-client</code> antes de uma atualização.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="vue-skills">Skills de Vue<a href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#vue-skills" class="hash-link" aria-label="Link direto para Skills de Vue" title="Link direto para Skills de Vue" translate="no">​</a></h2>
<p>Projetos Vue costumavam receber a skill de hooks do React, então os agents recorriam a padrões de React. A skill
<a href="https://skills.sh/reactive/data-client/data-client-vue" target="_blank" rel="noopener noreferrer" class="">data-client-vue</a> escreve código com <code>DataClientPlugin</code> e composables,
e <a class="" href="https://dataclient.io/pt-BR/vue/getting-started/debugging#debugging-with-agents">depura um app em execução</a>
(<a href="https://github.com/reactive/data-client/pull/4126" target="_blank" rel="noopener noreferrer" class="">#4126</a>).
<a href="https://skills.sh/reactive/data-client/data-client-vue-testing" target="_blank" rel="noopener noreferrer" class="">data-client-vue-testing</a> escreve testes com <code>renderDataCompose()</code>
e <code>mountDataClient()</code> (<a href="https://github.com/reactive/data-client/pull/4126" target="_blank" rel="noopener noreferrer" class="">#4126</a>) que seguem os
<a class="" href="https://dataclient.io/pt-BR/vue/guides/unit-testing-composables">guias de testes para Vue</a> (<a href="https://github.com/reactive/data-client/pull/4181" target="_blank" rel="noopener noreferrer" class="">#4181</a>).</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="llms-txt">llms.txt<a href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#llms-txt" class="hash-link" aria-label="Link direto para llms.txt" title="Link direto para llms.txt" translate="no">​</a></h2>
<p>Agents sem skills podem ler a documentação como markdown, seguindo a convenção <a href="https://llmstxt.org/" target="_blank" rel="noopener noreferrer" class="">llms.txt</a>
(<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>):</p>
<ul>
<li class=""><a href="https://dataclient.io/llms.txt" target="_blank" rel="noopener noreferrer" class="">llms.txt</a> para React e <a href="https://dataclient.io/vue/llms.txt" target="_blank" rel="noopener noreferrer" class="">vue/llms.txt</a> para Vue indexam todas as páginas, e o <code>llms-full.txt</code> ao lado de cada um reúne todas elas em um único arquivo</li>
<li class=""><a href="https://dataclient.io/rest/llms.txt" target="_blank" rel="noopener noreferrer" class="">rest/llms.txt</a> e <a href="https://dataclient.io/graphql/llms.txt" target="_blank" rel="noopener noreferrer" class="">graphql/llms.txt</a> cobrem apenas a API daquele pacote</li>
<li class="">Qualquer página da documentação vira markdown quando você adiciona <code>.md</code> à sua URL, como <a href="https://dataclient.io/docs/api/useSuspense.md" target="_blank" rel="noopener noreferrer" class="">/docs/api/useSuspense.md</a></li>
</ul>
<p>Toda página referencia seu llms.txt no <code>&lt;head&gt;</code>, e toda página da documentação referencia seu markdown, então um agent que receba a URL de qualquer página
os encontra sozinho.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="generated-references">Skills acompanham a documentação<a href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#generated-references" class="hash-link" aria-label="Link direto para Skills acompanham a documentação" title="Link direto para Skills acompanham a documentação" translate="no">​</a></h2>
<p>As páginas de referência das skills agora são geradas por framework a partir desta documentação, então trazem trechos compartilhados como comandos de
instalação e dão aos projetos Vue apenas código Vue. Uma verificação de CI falha quando uma skill diverge da documentação, então as skills se mantêm
atualizadas a cada lançamento (<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="also-available">Também disponível<a href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#also-available" class="hash-link" aria-label="Link direto para Também disponível" title="Link direto para Também disponível" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="skills">Skills para cada tarefa<a href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#skills" class="hash-link" aria-label="Link direto para Skills para cada tarefa" title="Link direto para Skills para cada tarefa" translate="no">​</a></h3>
<p>Além do setup, há skills para cada parte de um app com Data Client. O <code>/data-client-setup</code> instala as que o seu projeto
usa:</p>
<ul>
<li class=""><a href="https://skills.sh/reactive/data-client/data-client-rest-setup" target="_blank" rel="noopener noreferrer" class="">data-client-rest-setup</a> migra clientes <code>fetch</code>, axios, ky, got ou superagent para <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint">RestEndpoint</a>, junto com o <a class="" href="https://dataclient.io/pt-BR/rest/guides/axios-migration">guia de migração do axios</a> e seu codemod (<a href="https://github.com/reactive/data-client/pull/3867" target="_blank" rel="noopener noreferrer" class="">#3867</a>)</li>
<li class=""><a href="https://skills.sh/reactive/data-client/data-client-graphql-setup" target="_blank" rel="noopener noreferrer" class="">data-client-graphql-setup</a> e <a href="https://skills.sh/reactive/data-client/data-client-endpoint-setup" target="_blank" rel="noopener noreferrer" class="">data-client-endpoint-setup</a> cobrem GraphQL e funções assíncronas personalizadas</li>
<li class=""><a href="https://skills.sh/reactive/data-client/data-client-rest" target="_blank" rel="noopener noreferrer" class="">data-client-rest</a> define APIs com <a class="" href="https://dataclient.io/pt-BR/rest/api/resource">resource()</a> e <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint">RestEndpoint</a></li>
<li class=""><a href="https://skills.sh/reactive/data-client/data-client-schema" target="_blank" rel="noopener noreferrer" class="">data-client-schema</a> projeta schemas <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity">Entity</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a>, <a class="" href="https://dataclient.io/pt-BR/rest/api/Union">Union</a> e <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a></li>
<li class=""><a href="https://skills.sh/reactive/data-client/data-client-manager" target="_blank" rel="noopener noreferrer" class="">data-client-manager</a> escreve <a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers">Managers</a> para websockets, SSE, polling e logging</li>
<li class=""><a href="https://skills.sh/reactive/data-client/data-client-react" target="_blank" rel="noopener noreferrer" class="">data-client-react</a> e <a href="https://skills.sh/reactive/data-client/data-client-react-testing" target="_blank" rel="noopener noreferrer" class="">data-client-react-testing</a> usam e testam os hooks do React</li>
</ul>
<p>Veja todas em <a href="https://skills.sh/reactive/data-client" target="_blank" rel="noopener noreferrer" class="">skills.sh/reactive/data-client</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="debugging">Depure um app em execução<a href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#debugging" class="hash-link" aria-label="Link direto para Depure um app em execução" title="Link direto para Depure um app em execução" translate="no">​</a></h3>
<p>Pergunte ao seu agent "por que isso não buscou de novo?" ou "o que está no cache agora?" e ele pode verificar o app em execução em vez
de adivinhar a partir do código. Em modo de desenvolvimento, o <a class="" href="https://dataclient.io/pt-BR/docs/api/DevToolsManager#controllers">DevToolsManager</a> coloca o
<a class="" href="https://dataclient.io/pt-BR/docs/api/Controller">Controller</a> de cada store em <code>globalThis.__DC_CONTROLLERS__</code>, então um agent conectado via
<a href="https://github.com/ChromeDevTools/chrome-devtools-mcp" target="_blank" rel="noopener noreferrer" class="">Chrome DevTools MCP</a>, ou
<a href="https://docs.expo.dev/eas/ai/mcp/" target="_blank" rel="noopener noreferrer" class="">Expo MCP</a> para React Native, pode ler a store, acompanhar as ações despachadas e
relacioná-las às requisições de rede. O mapa está disponível em navegadores, React Native e Node
(<a href="https://github.com/reactive/data-client/pull/3753" target="_blank" rel="noopener noreferrer" class="">#3753</a>).</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_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>
<p>As skills de React e Vue fazem isso por meio do Chrome DevTools MCP; veja
<a class="" href="https://dataclient.io/pt-BR/docs/getting-started/debugging#debugging-with-agents">depuração com agents</a> para saber o que elas conseguem inspecionar.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="upgrades">Skills de atualização<a href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents#upgrades" class="hash-link" aria-label="Link direto para Skills de atualização" title="Link direto para Skills de atualização" translate="no">​</a></h3>
<p>As skills também cuidam de atualizações. A skill da v0.18 executa o <a href="https://dataclient.io/pt-BR/assets/files/v0.18-5ec0344d0d163e58306aa7410b310adc.js" target="_blank" class="">codemod</a> e depois trata do que ele não consegue, como
registrar <a class="" href="https://dataclient.io/pt-BR/rest/api/SchemaSimple"><code>argsKey</code></a> para schemas cuja saída depende dos argumentos do endpoint
(<a class="" href="https://dataclient.io/pt-BR/blog/2026/05/01/v0.18-scalar-typed-downloads#migration-guide">migração para a v0.18</a>). A skill do path-to-regexp v8 reescreve a
<a class="" href="https://dataclient.io/pt-BR/blog/2026/04/01/v0.16-parallel-fetching-collection-move-lazy#path-to-regexp-v8">sintaxe de paths</a> nos seus endpoints.</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">Skills</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">OpenSkills</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Claude Code</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><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" 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-v0.18-migration </span><span class="token punctuation" style="color:rgb(199, 146, 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"> path-to-regexp-v8-migration</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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><div class="token-line" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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><br></div><div class="token-line" 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"> migrations@data-client</span><br></div></code></pre></div></div></div></div></div>]]></content>
        <author>
            <name>Nathaniel Tucker</name>
            <uri>https://github.com/ntucker</uri>
        </author>
        <category label="AI Agents" term="AI Agents"/>
        <category label="Vue" term="Vue"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v0.19: Controller.set() em lote, TypeScript mais rápido]]></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[Escreva muitas entidades em uma única atualização da store com Controller.set([Entity], rows), e verifique os tipos do código de endpoints cerca de 2x mais rápido]]></summary>
        <content type="html"><![CDATA[<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>O original em inglês mudou depois desta tradução, então ela pode estar desatualizada.</p></div></div>
<p>A v0.19 permite que um <a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers">Manager</a> escreva um lote inteiro de linhas recebidas por stream em uma única atualização da store, verifica os tipos
do código de endpoints cerca de 2x mais rápido e corrige uma rodada de problemas de TypeScript e Vue.
Coding agents também ganham um plugin do Claude Code, skills de Vue e llms.txt; veja
<a class="" href="https://dataclient.io/pt-BR/blog/2026/10/06/coding-agents">Data Client para Coding Agents</a>.</p>
<p><strong>Novas 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() com schemas Array</a> - Escreva muitas entidades em uma única atualização da store com <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">até 95x mais rápido</a> do que um <code>set()</code> por linha</li>
</ul>
<p><strong>Desempenho:</strong></p>
<ul>
<li class=""><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#faster-types">TypeScript mais rápido</a> - Editores e o <code>tsc</code> verificam código com <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint">RestEndpoint</a> e <a class="" href="https://dataclient.io/pt-BR/rest/api/resource">resource()</a> <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#faster-types-results">cerca de 2x mais rápido com 40% menos memória</a>, detectando todos os erros que detectavam antes</li>
</ul>
<p><strong>Outras melhorias:</strong></p>
<ul>
<li class="">Corrige a resolução de módulos do TypeScript 7 para os <code>exports</code> do pacote; os imports agora resolvem para os arquivos de declaração (<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> executa os efeitos de montagem do provider quando a primeira renderização suspende (<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">Os valores de Controller.set() são tipados pelo schema</a>, então <code>ctrl.set(new schema.All(Todo), 42)</code> é um erro de TypeScript (<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() exclui uma entidade com um schema Invalidate</a> sem a gambiarra do lote de uma linha (<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() recebe params tipados</a> em <code>new RestEndpoint()</code>, <code>.extend()</code> e <code>resource().extend()</code>, então um parâmetro de path errado é um erro de TypeScript em vez de <code>undefined</code> em tempo de execução (<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">Os retornos de getOptimisticResponse() são tipados pelo schema</a>, então um tipo de campo errado é um erro de TypeScript em vez de um flash de dados incorretos (<a href="https://github.com/reactive/data-client/pull/4198" target="_blank" rel="noopener noreferrer" class="">#4198</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> e <a class="" href="https://dataclient.io/pt-BR/vue/api/useLive">useLive()</a> do Vue mantêm os dados anteriores enquanto novos argumentos carregam, em vez de retornar <code>undefined</code> (<a href="https://github.com/reactive/data-client/pull/4131" target="_blank" rel="noopener noreferrer" class="">#4131</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> e <a class="" href="https://dataclient.io/pt-BR/vue/api/useLive">useLive()</a> do Vue enviam erros de fetch após a mudança de argumentos para <code>onErrorCaptured()</code> em vez de uma rejeição de promise não tratada (<a href="https://github.com/reactive/data-client/pull/4135" target="_blank" rel="noopener noreferrer" class="">#4135</a>)</li>
<li class=""><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> e <a class="" href="https://dataclient.io/pt-BR/vue/api/useFetch">useFetch()</a> do Vue não buscam mais novamente dados desatualizados a cada atualização da store, então um <code>controller.set()</code> não é sobrescrito (<a href="https://github.com/reactive/data-client/pull/4134" target="_blank" rel="noopener noreferrer" class="">#4134</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> do Vue <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#vue-stale-while-revalidate">mostra dados desatualizados na montagem</a> e busca novamente em segundo plano, como no React, em vez de mostrar o fallback do <code>&lt;Suspense&gt;</code> até a nova busca terminar (<a href="https://github.com/reactive/data-client/pull/4169" target="_blank" rel="noopener noreferrer" class="">#4169</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/vue/api/useDLE">useDLE()</a> e <a class="" href="https://dataclient.io/pt-BR/vue/api/useCache">useCache()</a> do Vue mantêm dados <code>invalidIfStale</code> expirados durante atualizações não relacionadas da store, em vez de ficarem travados carregando (<a href="https://github.com/reactive/data-client/pull/4142" target="_blank" rel="noopener noreferrer" class="">#4142</a>)</li>
<li class="">O <code>DataClientPlugin</code> do Vue é instalado em versões do Vue anteriores à 3.5 em vez de lançar <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="">O <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin#gcPolicy">DataClientPlugin</a> do Vue faz coleta de lixo por padrão, igual ao <a class="" href="https://dataclient.io/pt-BR/docs/api/DataProvider">DataProvider</a> do React, então você não precisa mais passar <code>gcPolicy</code>; <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#vue-gc">como ele decide o que remover</a> (<a href="https://github.com/reactive/data-client/pull/4148" target="_blank" rel="noopener noreferrer" class="">#4148</a>)</li>
<li class="">Os composables do Vue aceitam <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#vue-getter-args">argumentos getter</a> como <code>() =&gt; ({ id: props.id })</code>; eles eram tipados para permiti-los, mas passavam a própria função ao endpoint (<a href="https://github.com/reactive/data-client/pull/4115" target="_blank" rel="noopener noreferrer" class="">#4115</a>)</li>
<li class="">Corrige os erros <code>Cannot find name 'NoInfer'</code> e <code>export type</code> no TypeScript 4.x com <code>skipLibCheck</code> desativado (<a href="https://github.com/reactive/data-client/pull/4138" target="_blank" rel="noopener noreferrer" class="">#4138</a>)</li>
<li class="">Corrige erros de tipo de <code>Entity</code>, <code>Endpoint</code>, <code>Union</code> e <code>RestEndpoint</code> no TypeScript 4.0–4.5 com <code>skipLibCheck</code> desativado (<a href="https://github.com/reactive/data-client/pull/4140" target="_blank" rel="noopener noreferrer" class="">#4140</a>)</li>
<li class="">Corrige erros <code>',' expected</code> ao importar <code>@data-client/react/redux</code>, <code>@data-client/react/nextjs</code> ou <code>@data-client/test</code> no 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="">Corrige <code>act</code> e <code>renderHook</code> de <code>@data-client/test</code> tipados como <code>any</code> no 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="">Classes <a class="" href="https://dataclient.io/pt-BR/rest/api/Entity">Entity</a> podem ser usadas onde um <code>EntityInterface</code> é esperado (<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 as sobrescritas de <code>pk()</code></a> para um lançamento futuro</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/docs/api/useCache">useCache()</a> e <a class="" href="https://dataclient.io/pt-BR/docs/api/useDLE">useDLE()</a> retornam <code>undefined</code> para uma entidade excluída cuja nova busca falhou, em vez de um <code>Symbol</code> truthy que passava por verificações <code>if (!data)</code>; <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#deleted-entity-undefined">remova quaisquer gambiarras</a> (<a href="https://github.com/reactive/data-client/pull/4150" target="_blank" rel="noopener noreferrer" class="">#4150</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/vue/api/useFetch">useFetch()</a> do Vue impede que seus dados sejam coletados pelo garbage collector enquanto está montado, como o <a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a>, então um <code>gcPolicy</code> configurado não remove mais dados pré-carregados que componentes leem depois (<a href="https://github.com/reactive/data-client/pull/4152" target="_blank" rel="noopener noreferrer" class="">#4152</a>)</li>
<li class="">Apps com o <a class="" href="https://dataclient.io/pt-BR/docs/getting-started/debugging">Redux DevTools</a> aberto não travam mais em desenvolvimento com stores grandes ou atualizações frequentes; cada atualização <a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#devtools-perf">serializa 40-60x mais rápido</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> com um objeto de sobrescritas de endpoints mantém em seu tipo os endpoints adicionados antes com <code>.extend('name', options)</code>, então usá-los não é mais um erro de TypeScript (<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> e <code>remove</code> aceitam os campos da Entity como body quando um <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a> ou <a class="" href="https://dataclient.io/pt-BR/rest/api/Lazy">Lazy</a> envolve a <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a>, em vez de apenas <code>FormData</code> (<a href="https://github.com/reactive/data-client/pull/4226" target="_blank" rel="noopener noreferrer" class="">#4226</a>)</li>
<li class=""><a class="" href="https://dataclient.io/pt-BR/vue/api/useFetch">useFetch()</a> do Vue é tipado como o <code>Ref</code> somente leitura que retorna, então <code>promise.resolved</code> (sempre <code>undefined</code>) agora é um erro de TypeScript; leia <code>promise.value.resolved</code> em vez disso (<a href="https://github.com/reactive/data-client/pull/4114" target="_blank" rel="noopener noreferrer" class="">#4114</a>)</li>
<li class="">Uma subclasse de <code>Controller</code> passada ao <a class="" href="https://dataclient.io/pt-BR/docs/api/DataProvider#Controller">DataProvider</a> ou ao <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin#Controller">DataClientPlugin</a> não precisa mais de um cast para passar na verificação de tipos (<a href="https://github.com/reactive/data-client/pull/4228" target="_blank" rel="noopener noreferrer" class="">#4228</a>)</li>
<li class="">A <code>store</code> de <a class="" href="https://dataclient.io/pt-BR/docs/guides/redux">prepareStore()</a> pode ser passada ao <code>&lt;Provider&gt;</code> do react-redux sem cast, e tem <code>dispatch()</code> em seu tipo (<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 aceita FormData</a> sem cast, como <code>update</code>, <code>partialUpdate</code> e <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> e <code>remove</code> enviam um body em array como JSON, então criar ou remover vários itens de uma vez não envia mais <code>"[object Object]"</code> ao seu servidor; <code>resource().create</code> também aceita um array (<a href="https://github.com/reactive/data-client/pull/4262" target="_blank" rel="noopener noreferrer" class="">#4262</a>)</li>
<li class="">O <code>createDataClient()</code> do Vue está descontinuado, já que é interno ao <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin">DataClientPlugin</a>; instale o plugin com <code>app.use(DataClientPlugin, options)</code> em vez de chamá-lo diretamente (<a href="https://github.com/reactive/data-client/pull/4193" target="_blank" rel="noopener noreferrer" class="">#4193</a>)</li>
<li class="">O <code>waitForNextUpdate()</code> do <code>renderDataCompose()</code> do Vue está descontinuado, já que desiste silenciosamente após 1 segundo e deixa um teste passar enquanto ainda está suspenso; use <code>await result</code> em vez disso, ou <code>await allSettled()</code> após uma mudança, que agora também espera as buscas iniciadas por uma mudança de prop (<a class="" href="https://dataclient.io/pt-BR/vue/guides/unit-testing-composables#renderdatacompose-api">testes unitários de 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">Mudanças incompatíveis:</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 ou posterior é obrigatório</a> - as declarações para TypeScript 3.x foram removidas (<a href="https://github.com/reactive/data-client/pull/4151" target="_blank" rel="noopener noreferrer" class="">#4151</a>)</li>
</ul>
<p><strong><a class="" href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#future-releases">Prepare-se para lançamentos futuros:</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">Tipe <code>args</code> como <code>readonly</code> nas sobrescritas de <code>Entity.pk()</code></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> em vez do <code>createDataClient()</code> do Vue</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">Substitua <code>waitForNextUpdate()</code> nos testes de Vue</a></li>
</ul>
<!-- -->
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="batch-set">Controller.set() em lote<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 Controller.set() em lote" title="Link direto para Controller.set() em lote" translate="no">​</a></h2>
<p>Um <a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers">Manager</a> que recebe um stream de linhas (como cotações de preços por um websocket) agora pode escrever
todas elas com um único <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#set-array">Controller.set()</a> passando um schema <a class="" href="https://dataclient.io/pt-BR/rest/api/Array">Array</a>.
Antes da v0.19, <code>[Ticker]</code> era um erro de TypeScript, então a gambiarra comum era um <code>set()</code> por linha:</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>Cada linha é mesclada com sua entidade armazenada, e as entidades que não estão na lista ficam intactas. Schemas Array não recebem <code>args</code> nem
função de atualização. Para agrupar em lote tipos de Entity diferentes, exclusões ou linhas indexadas por id, passe um schema <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> ou <a class="" href="https://dataclient.io/pt-BR/rest/api/Values">Values</a>; veja
<a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#set-array">Controller.set()</a> para exemplos.
<a href="https://github.com/reactive/data-client/pull/4103" target="_blank" rel="noopener noreferrer" class="">#4103</a></p>
<p>Experimente os dois botões abaixo. Esta verificação no navegador parte de um store vazio e mede o tempo de um <code>Promise.all</code> com 500 chamadas de <code>set()</code>
em comparação com um único <code>set()</code> em lote. Ambos os caminhos resultam em um único commit do React, e cada um grava 500 preços novos.</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">Resultado</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">Desempenho<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 Desempenho" title="Link direto para Desempenho" translate="no">​</a></h3>
<p>Cada <code>set()</code> é uma atualização separada da store, e toda atualização da store copia a tabela daquele tipo de entidade. Escrever as linhas uma
de cada vez repete essa cópia para cada linha, então o custo cresce tanto com o tamanho do lote quanto com o tamanho da store. Um lote
paga essa cópia uma única vez.</p>
<p>O gráfico é o benchmark <code>setMany</code> em node de
<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>:
uma store que já contém 500 entidades, depois um <code>set()</code> síncrono por linha comparado a um único <code>set([Ticker], rows)</code>.
Ele mede a atualização da store: <strong>20x</strong> mais rápido para 50 linhas e <strong>95x</strong> mais rápido para 500 linhas.
<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">setMany em Node em uma store com 500 entidades</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 tabindex="0" class="row_OlYf"><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">One set() per row<!-- --> <!-- -->10.8<!-- --> <!-- -->ms<!-- --> → <!-- -->set([Ticker], rows)<!-- --> <strong>0.54<!-- --> <!-- -->ms</strong></span></div><div tabindex="0" class="row_OlYf"><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">One set() per row<!-- --> <!-- -->103<!-- --> <!-- -->ms<!-- --> → <!-- -->set([Ticker], rows)<!-- --> <strong>1.08<!-- --> <!-- -->ms</strong></span></div></div></figure>
<center><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/blob/master/examples/benchmark/core.js" target="_blank" rel="noopener noreferrer" class="">Ver o benchmark setMany</a></p></center>
<p>Em um <a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers">Manager</a>, acumule as mensagens recebidas em um buffer e descarregue cada lote com um único <code>set()</code>, como descrito em
<a class="" href="https://dataclient.io/pt-BR/docs/concepts/managers#batching">Agrupando atualizações de alta frequência em lote</a>. O <code>StreamManager</code> do app de moedas agora
descarrega as mensagens de ticker da Coinbase dessa forma.</p>
<center><video width="600" controls="" muted="" playsinline="" loop="" aria-label="Redux DevTools para duas cópias do StreamManager do app de moedas recebendo três rajadas de 500 mensagens de ticker. Chamar set() para cada mensagem registra 1.500 ações set, enquanto acumular as mensagens em um buffer e descarregá-las com set([Ticker], rows) registra 3." style="width:100%"><source src="/pt-BR/videos/blog/batch-set-devtools.webm" type="video/webm">Redux DevTools para duas cópias do StreamManager do app de moedas recebendo três rajadas de 500 mensagens de ticker. Chamar set() para cada mensagem registra 1.500 ações set, enquanto acumular as mensagens em um buffer e descarregá-las com set([Ticker], rows) registra 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>Se você filtra as ações do <a class="" href="https://dataclient.io/pt-BR/docs/api/DevToolsManager">DevToolsManager</a> por schema, o <code>action.schema</code> de uma escrita em lote
é o schema Array, então compare <code>action.schema[0]</code> para <code>[Ticker]</code> em vez da própria Entity.</p></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="faster-types">TypeScript mais rápido<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 TypeScript mais rápido" title="Link direto para TypeScript mais rápido" translate="no">​</a></h2>
<p>O TypeScript verifica novamente seu código a cada tecla digitada no editor e a cada build de CI. Em apps com muitos endpoints,
tipos pesados de biblioteca aparecem como autocomplete lento, sublinhados vermelhos que levam segundos para aparecer e builds mais demorados.
A v0.19 torna <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> e <code>.extend()</code> muito mais baratos
de verificar, sem mudanças de código do seu lado. O TypeScript continua reportando todos os erros que reportava antes
(<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">Resultados<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 Resultados" title="Link direto para Resultados" translate="no">​</a></h3>
<p>Nosso teste de estresse mais pesado, um arquivo com 150 RestEndpoints com paths longos, <code>.extend()</code> e <code>.paginated()</code>, agora é verificado
<strong>2x mais rápido no TypeScript 6</strong> e <strong>2,2x mais rápido no TypeScript 7</strong>, usando cerca de <strong>40% menos memória</strong>. Todos os números comparam
os pacotes publicados da v0.18.1 com a v0.19; os tempos de verificação são o melhor de 10 execuções.</p>
<figure class="perfChart_LYCy"><figcaption class="text--center text--bold margin-bottom--sm">Verificando 150 RestEndpoints com paths longos</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 tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->3.83<!-- --> <!-- -->s<!-- --> → <!-- -->v0.19<!-- --> <strong>1.98<!-- --> <!-- -->s</strong></span></div><div tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->1.5<!-- --> <!-- -->s<!-- --> → <!-- -->v0.19<!-- --> <strong>0.69<!-- --> <!-- -->s</strong></span></div></div></figure>
<figure class="perfChart_LYCy"><figcaption class="text--center text--bold margin-bottom--sm">Memória para o mesmo arquivo</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 tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->365<!-- --> <!-- -->MB<!-- --> → <!-- -->v0.19<!-- --> <strong>211<!-- --> <!-- -->MB</strong></span></div><div tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->220<!-- --> <!-- -->MB<!-- --> → <!-- -->v0.19<!-- --> <strong>128<!-- --> <!-- -->MB</strong></span></div></div></figure>
<p>Código com muitos endpoints faz muito menos trabalho de tipos. Instanciações de tipo são a unidade de trabalho do TypeScript: elas são
determinísticas, então podem ser comparadas com precisão entre máquinas. Union faz mais trabalho do que na v0.18, porque a v0.19 agora
<a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typed-set" class="">verifica os tipos dos valores de set()</a> (veja abaixo).</p>
<figure class="perfChart_LYCy"><figcaption class="text--center text--bold margin-bottom--sm">Instanciações de tipo por teste de estresse</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 tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->822<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>341<!-- --> <!-- -->K</strong></span></div><div tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->20.2<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>13.4<!-- --> <!-- -->K</strong></span></div><div tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->145<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>122<!-- --> <!-- -->K</strong></span></div><div tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->62.6<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>47.3<!-- --> <!-- -->K</strong></span></div><div tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->17<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>12.8<!-- --> <!-- -->K</strong></span></div><div tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->118<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>99.3<!-- --> <!-- -->K</strong></span></div><div tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->9<!-- --> <!-- -->K<!-- --> → <!-- -->v0.19<!-- --> <strong>16.1<!-- --> <!-- -->K</strong></span></div></div></figure>
<p>Passe o mouse ou toque em uma célula para ver os números exatos.</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 tabindex="0" class=""><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">3.83<!-- -->s<!-- --> →<!-- --> <strong>1.98<!-- -->s</strong></span></td><td tabindex="0" class=""><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">1.5<!-- -->s<!-- --> →<!-- --> <strong>0.69<!-- -->s</strong></span></td><td tabindex="0" class=""><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">365<!-- -->MB<!-- --> →<!-- --> <strong>211<!-- -->MB</strong></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 tabindex="0" class=""><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">0.42<!-- -->s<!-- --> →<!-- --> <strong>0.42<!-- -->s</strong></span></td><td tabindex="0" class=""><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">0.062<!-- -->s<!-- --> →<!-- --> <strong>0.053<!-- -->s</strong></span></td><td tabindex="0" class=""><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">106<!-- -->MB<!-- --> →<!-- --> <strong>109<!-- -->MB</strong></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 tabindex="0" class=""><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">1.24<!-- -->s<!-- --> →<!-- --> <strong>1.12<!-- -->s</strong></span></td><td tabindex="0" class=""><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">0.41<!-- -->s<!-- --> →<!-- --> <strong>0.38<!-- -->s</strong></span></td><td tabindex="0" class=""><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">167<!-- -->MB<!-- --> →<!-- --> <strong>157<!-- -->MB</strong></span></td></tr><tr><th scope="row">Vue<div class="description_oO4J">The same 40 resources through every composable</div></th><td tabindex="0" class=""><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">0.68<!-- -->s<!-- --> →<!-- --> <strong>0.68<!-- -->s</strong></span></td><td tabindex="0" class=""><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">0.17<!-- -->s<!-- --> →<!-- --> <strong>0.15<!-- -->s</strong></span></td><td tabindex="0" class=""><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">145<!-- -->MB<!-- --> →<!-- --> <strong>139<!-- -->MB</strong></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 tabindex="0" class=""><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">0.44<!-- -->s<!-- --> →<!-- --> <strong>0.38<!-- -->s</strong></span></td><td tabindex="0" class=""><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">0.086<!-- -->s<!-- --> →<!-- --> <strong>0.052<!-- -->s</strong></span></td><td tabindex="0" class=""><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">111<!-- -->MB<!-- --> →<!-- --> <strong>101<!-- -->MB</strong></span></td></tr><tr><th scope="row">Schemas<div class="description_oO4J">All, Query, Invalidate, Array, Object and Collection</div></th><td tabindex="0" class=""><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">1.1<!-- -->s<!-- --> →<!-- --> <strong>1.07<!-- -->s</strong></span></td><td tabindex="0" class=""><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">0.36<!-- -->s<!-- --> →<!-- --> <strong>0.31<!-- -->s</strong></span></td><td tabindex="0" class=""><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">156<!-- -->MB<!-- --> →<!-- --> <strong>150<!-- -->MB</strong></span></td></tr><tr><th scope="row">Union<div class="description_oO4J">A 30-member Union in a Collection and Values</div></th><td tabindex="0" class=""><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">0.42<!-- -->s<!-- --> →<!-- --> <strong>0.41<!-- -->s</strong></span></td><td tabindex="0" class=""><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">0.071<!-- -->s<!-- --> →<!-- --> <strong>0.068<!-- -->s</strong></span></td><td tabindex="0" class=""><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">107<!-- -->MB<!-- --> →<!-- --> <strong>101<!-- -->MB</strong></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 tabindex="0" class=""><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">1.49<!-- -->s<!-- --> →<!-- --> <strong>1.07<!-- -->s</strong></span></td><td tabindex="0" class=""><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">0.54<!-- -->s<!-- --> →<!-- --> <strong>0.25<!-- -->s</strong></span></td><td tabindex="0" class=""><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">176<!-- -->MB<!-- --> →<!-- --> <strong>131<!-- -->MB</strong></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 tabindex="0" class=""><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">3.58<!-- -->s<!-- --> →<!-- --> <strong>3.43<!-- -->s</strong></span></td><td tabindex="0" class=""><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">1.67<!-- -->s<!-- --> →<!-- --> <strong>1.85<!-- -->s</strong></span></td><td tabindex="0" class=""><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">381<!-- -->MB<!-- --> →<!-- --> <strong>384<!-- -->MB</strong></span></td></tr></tbody></table></div>
<p>As linhas de set() medem os <a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typed-set" class="">valores tipados de set()</a>, que a v0.18 não verificava de forma alguma. Valores simples ainda são verificados
mais rápido do que antes, e funções de atualização em Unions grandes são verificadas em aproximadamente o mesmo tempo, mesmo que o TypeScript agora
verifique o valor de retorno de cada função de atualização (<a href="https://github.com/reactive/data-client/pull/4179" target="_blank" rel="noopener noreferrer" class="">#4179</a>).</p>
<p>Arquivos pequenos são dominados pelo custo fixo de inicialização do TypeScript (carregar <code>lib.dom.d.ts</code> sozinho leva cerca de 100MB), então
seu tempo e memória quase não mudam. A economia se acumula conforme a base de código cresce.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="faster-types-how">O que mudou<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 O que mudou" title="Link direto para O que mudou" translate="no">​</a></h3>
<ul>
<li class=""><code>.extend()</code> e <code>.paginated()</code> são compartilhados entre todos os endpoints em vez de recriados para cada tipo de endpoint.</li>
<li class="">As opções de endpoint são inferidas como tipos de objeto simples, então o TypeScript para de reconstruí-las a cada uso.</li>
<li class="">Parâmetros de path como <code>/users/:id</code> são lidos em uma única passagem.</li>
</ul>
<p>Antes de publicar, desativamos todos os <code>@ts-expect-error</code> da suíte de testes no TypeScript 4.0 até o 7 e confirmamos
que todos os erros continuam aparecendo no mesmo lugar.</p>
<p>No TypeScript 5.x e anteriores, um método <code>process(value, params)</code> passado ao <code>.extend()</code> também não falha mais com
"implicitly has an 'any' type" em modo <code>strict</code>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="other-improvements">Outras melhorias<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 Outras melhorias" title="Link direto para Outras melhorias" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="typed-set">Valores tipados de set()<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 Valores tipados de set()" title="Link direto para Valores tipados de set()" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#set">Controller.set()</a> antes aceitava qualquer valor para um schema, então um erro de digitação ou um tipo de campo
errado só aparecia como dados incorretos em tempo de execução. Os valores agora são tipados pelo schema: uma
<a class="" href="https://dataclient.io/pt-BR/rest/api/Entity">Entity</a> recebe seus campos, enquanto uma <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> ou
Array recebe uma lista de linhas. Todo campo é opcional, já que <code>set()</code> mescla com o que já está armazenado, e
números e strings são intercambiáveis assim como nas respostas de API.
<a href="https://github.com/reactive/data-client/pull/4133" target="_blank" rel="noopener noreferrer" class="">#4133</a></p>
<p>Passe o mouse sobre os sublinhados vermelhos para ver cada erro.</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>Um <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a> recebe a entrada do schema que envolve, já que <code>set()</code> normaliza esse schema em vez de
reverter o <code>process()</code>. Quando cada membro declara seu discriminador como um literal (como <code>readonly type = 'post'</code>), uma
linha de <a class="" href="https://dataclient.io/pt-BR/rest/api/Union">Union</a> é verificada contra o membro que ela seleciona, então não pode misturar campos de membros diferentes; veja <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#set">Unions</a>.</p>
<p>Se um código que antes compilava agora falha aqui, ele estava escrevendo dados que seu schema não descreve. Corrija o valor,
ou amplie os tipos dos campos da Entity se os dados realmente puderem ter essa forma.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="set-invalidate">Exclua uma entidade com 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 Exclua uma entidade com set()" title="Link direto para Exclua uma entidade com set()" translate="no">​</a></h3>
<p>Passar um schema <a class="" href="https://dataclient.io/pt-BR/rest/api/Invalidate">Invalidate</a> ao <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#set-array">Controller.set()</a> exclui a
entidade que sua linha identifica, mas a forma singular era um erro de TypeScript, então o código a envolvia em um lote de uma linha. Agora
ela passa na verificação de tipos, com a linha tipada pelos campos da Entity
(<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>Como o <code>set()</code> em lote, ela não recebe <code>args</code> nem função de atualização.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="extend-process-params">Params tipados em process()<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 Params tipados em process()" title="Link direto para Params tipados em process()" translate="no">​</a></h3>
<p>Um método <a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#process">process()</a> passado a <code>new RestEndpoint()</code>,
<a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#extend">.extend()</a> ou <a class="" href="https://dataclient.io/pt-BR/rest/api/resource#extend">resource().extend()</a> recebia <code>params</code> tipado como
<code>any</code>, então ler um parâmetro que o endpoint não tem compilava e retornava <code>undefined</code> em tempo de execução. <code>params</code> e
<code>body</code> agora são tipados a partir do endpoint, incluindo um <code>path</code> definido na mesma chamada de <code>.extend()</code>
(<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>Quando todos os params são opcionais, <code>params</code> pode ser <code>undefined</code>, então leia-o com <code>params?.page</code>.</p>
<p>Isso pode revelar novos erros de TypeScript em métodos <code>process()</code> existentes. Cada um marca uma leitura que poderia ser <code>undefined</code>
ou lançar uma exceção em tempo de execução, então corrija o nome do param ou adicione a verificação que falta.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="typed-optimistic-response">Respostas otimistas tipadas<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 Respostas otimistas tipadas" title="Link direto para Respostas otimistas tipadas" translate="no">​</a></h3>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#getoptimisticresponse">getOptimisticResponse()</a> podia retornar qualquer coisa, a menos que o endpoint tivesse
um <code>process()</code> tipado, então um tipo de campo errado só aparecia como dados incorretos na interface até o servidor responder. O valor de retorno
agora é verificado contra o schema do endpoint, como um <a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#typed-set" class="">valor tipado de set()</a>: uma Entity recebe qualquer um de seus
campos, e uma <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a> recebe uma lista deles
(<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>Isso pode revelar novos erros de TypeScript em métodos <code>getOptimisticResponse()</code> existentes. Cada um marca um valor que seria
armazenado com o tipo errado até o servidor responder, então retorne o tipo real do campo (aqui, <code>!todo.completed</code>).</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="query-collection-push">push() tipado em Collections ordenadas<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 push() tipado em Collections ordenadas" title="Link direto para push() tipado em Collections ordenadas" translate="no">​</a></h3>
<p>Envolver uma <a class="" href="https://dataclient.io/pt-BR/rest/api/Collection">Collection</a> em um <a class="" href="https://dataclient.io/pt-BR/rest/api/Query">Query</a> para ordená-la ou filtrá-la fazia
<a class="" href="https://dataclient.io/pt-BR/rest/api/RestEndpoint#push">push</a>, <code>unshift</code> e <code>remove</code> rejeitarem qualquer body exceto <code>FormData</code>, embora adicionem à
lista em tempo de execução. O body agora é tipado a partir da Entity da Collection, então o cast pode ser removido e um campo errado é um
erro de TypeScript. O mesmo vale para uma Collection envolvida em <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>onde <code>getPosts</code> ordena sua Collection com um 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 em 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 em resource().create" title="Link direto para FormData em resource().create" translate="no">​</a></h3>
<p>O <code>create</code> de <a class="" href="https://dataclient.io/pt-BR/rest/api/resource">resource()</a> envia um body <code>FormData</code> como está, assim como <code>update</code>, <code>partialUpdate</code> e
<a class="" href="https://dataclient.io/pt-BR/rest/api/resource#push">getList.push</a>, mas seu tipo só permitia um objeto, então enviar um formulário exigia um cast
(<a href="https://github.com/reactive/data-client/pull/4235" target="_blank" rel="noopener noreferrer" class="">#4235</a>). Remova o 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> está descontinuado; <a class="" href="https://dataclient.io/pt-BR/rest/api/resource#push">getList.push</a> é seu substituto e também aceita <code>FormData</code>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="vue-getter-args">Argumentos getter no Vue<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 Argumentos getter no Vue" title="Link direto para Argumentos getter no Vue" translate="no">​</a></h3>
<p>Composables do Vue como <a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> e <a class="" href="https://dataclient.io/pt-BR/vue/api/useLive">useLive()</a> eram tipados para aceitar uma
função getter como argumento, mas passavam a própria função ao endpoint em vez de chamá-la. Getters agora
funcionam da mesma forma que refs e <code>computed</code>, e o composable busca novamente quando qualquer coisa que o getter lê muda
(<a href="https://github.com/reactive/data-client/pull/4115" target="_blank" rel="noopener noreferrer" class="">#4115</a>). Remova o <code>computed()</code> ao redor se você só o usava para tornar
os argumentos reativos:</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>Isso vale para todo composable que recebe argumentos de endpoint: <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> e <a class="" href="https://dataclient.io/pt-BR/vue/api/useSubscription">useSubscription()</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="vue-gc">Vue faz coleta de lixo por padrão<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 faz coleta de lixo por padrão" title="Link direto para Vue faz coleta de lixo por padrão" translate="no">​</a></h3>
<p>O <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin#gcPolicy">DataClientPlugin</a> do Vue só removia dados não utilizados se você mesmo passasse um
<code>gcPolicy</code>. Agora o padrão é <code>new GCPolicy()</code>, o mesmo do <a class="" href="https://dataclient.io/pt-BR/docs/api/DataProvider">DataProvider</a> do React, então você pode
remover a opção, a menos que a personalize (<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>Os dados só são removidos quando nenhum componente montado os lê <em>e</em> o dobro do seu tempo de vida de frescor passou desde que foram
buscados (no mínimo dois minutos). Uma varredura verifica a cada cinco minutos. Qualquer coisa que um componente leia novamente antes disso
volta a estar em uso.</p>
<center><div style="max-width:640px"></div></center>
<p>Um componente que monta após a remoção trata os dados como nunca buscados: o <a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> os busca
de novo, enquanto o <a class="" href="https://dataclient.io/pt-BR/vue/api/useCache">useCache()</a> retorna <code>undefined</code>. Para manter dados não utilizados por mais tempo ou varrer com menos frequência,
passe seu próprio <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">Stale-while-revalidate no Vue<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 Stale-while-revalidate no Vue" title="Link direto para Stale-while-revalidate no Vue" translate="no">​</a></h3>
<p>Quando um componente monta com dados que estão <a class="" href="https://dataclient.io/pt-BR/docs/concepts/expiry-policy#stale">desatualizados</a> mas ainda válidos, o
<a class="" href="https://dataclient.io/pt-BR/vue/api/useSuspense">useSuspense()</a> do Vue agora os renderiza imediatamente e busca novamente em segundo plano, como no React. Antes,
ele mostrava o fallback do <code>&lt;Suspense&gt;</code> até a nova busca terminar (<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="Dois componentes Vue lado a lado, antes e depois da v0.19. Ambos mostram Loading na primeira montagem. Após desmontar e esperar até o preço ficar desatualizado, remontar mostra Loading de novo na versão anterior, enquanto a versão nova mostra o preço desatualizado imediatamente e busca novamente em segundo plano."><source src="/pt-BR/videos/blog/vue-suspense-stale.mp4" type="video/mp4">Dois componentes Vue lado a lado, antes e depois da v0.19. Ambos mostram Loading na primeira montagem. Após desmontar e esperar até o preço ficar desatualizado, remontar mostra Loading de novo na versão anterior, enquanto a versão nova mostra o preço desatualizado imediatamente e busca novamente em segundo plano.</video></center>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="entity-pk-args">Classes Entity passam na verificação de tipos como 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 Classes Entity passam na verificação de tipos como EntityInterface" title="Link direto para Classes Entity passam na verificação de tipos como EntityInterface" translate="no">​</a></h3>
<p>Funções auxiliares tipadas para aceitar qualquer Entity com <code>EntityInterface</code> rejeitavam classes Entity, porque
<a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#pk">Entity.pk()</a> tipava seus <code>args</code> como um array mutável. Agora é <code>readonly any[]</code>, então isto
passa na verificação de tipos (<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>Se você sobrescreve <code>static pk()</code> e tipa <code>args</code> como um array mutável, ainda compila, mas um futuro lançamento com mudanças incompatíveis
exigirá <code>readonly</code>; <a href="https://dataclient.io/pt-BR/blog/2026/10/03/v0.19-batch-set#future-pk-args" class="">atualize agora</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="deleted-entity-undefined">Entidades excluídas são lidas como 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 Entidades excluídas são lidas como undefined" title="Link direto para Entidades excluídas são lidas como undefined" translate="no">​</a></h3>
<p>Quando uma entidade era excluída e sua nova busca falhava, <a class="" href="https://dataclient.io/pt-BR/docs/api/useCache">useCache()</a> e <a class="" href="https://dataclient.io/pt-BR/docs/api/useDLE">useDLE()</a>
(React e Vue) retornavam um <code>Symbol</code> interno como dados. Um <code>Symbol</code> é truthy, então a verificação comum de "ainda não carregou" o deixava
passar e o componente renderizava como se tivesse uma entidade
(<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>Agora <code>data</code> é <code>undefined</code>, de acordo com seu tipo e com <a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#get">Controller.get()</a>. O mesmo vale para
<a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#getResponse">Controller.getResponse()</a> e
<a class="" href="https://dataclient.io/pt-BR/docs/api/Controller#fetchIfStale">Controller.fetchIfStale()</a>, por exemplo em <a class="" href="https://dataclient.io/pt-BR/docs/api/Manager">Managers</a> personalizados.</p>
<p>Se você contornou isso, a gambiarra pode ser removida. Uma simples verificação de truthiness basta:</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>Para mostrar algo específico quando a nova busca falhou (por exemplo, um 404 após a exclusão), leia <code>error</code> de
<a class="" href="https://dataclient.io/pt-BR/docs/api/useDLE">useDLE()</a> em vez de inspecionar <code>data</code>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="devtools-perf">Redux DevTools mais rápido<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 Redux DevTools mais rápido" title="Link direto para Redux DevTools mais rápido" translate="no">​</a></h3>
<p>Com a extensão <a class="" href="https://dataclient.io/pt-BR/docs/getting-started/debugging">Redux DevTools</a> aberta, toda atualização da store em desenvolvimento
serializa a store inteira para a extensão, e cada timestamp nela era formatado do jeito lento. Stores grandes ou
atualizações frequentes, como polling, dados em tempo real ou muitas chamadas de <code>controller.set()</code>, faziam a página travar. Cada atualização agora
serializa <strong>40-60x mais rápido</strong>, e os timestamps continuam aparecendo como <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>). Builds de produção não incluem o DevTools, então não são
afetados.</p>
<figure class="perfChart_LYCy"><figcaption class="text--center text--bold margin-bottom--sm">Serialização do DevTools por atualização da store</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 tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->18.6<!-- --> <!-- -->ms<!-- --> → <!-- -->v0.19<!-- --> <strong>0.31<!-- --> <!-- -->ms</strong></span></div><div tabindex="0" class="row_OlYf"><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">v0.18<!-- --> <!-- -->201<!-- --> <!-- -->ms<!-- --> → <!-- -->v0.19<!-- --> <strong>5<!-- --> <!-- -->ms</strong></span></div></div></figure>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="migration-guide">Guia de migração<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 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="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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></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 ou posterior<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 ou posterior" title="Link direto para TypeScript 4.0 ou posterior" translate="no">​</a></h3>
<p>Pule esta seção se você já usa TypeScript 4.0 ou posterior.</p>
<p>As declarações para TypeScript 3.x foram removidas, já que não passavam mais na verificação de tipos em nenhuma versão do TypeScript 3.x. Atualize
<code>typescript</code> para <code>^4.0.0</code> ou posterior nas suas <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="future-releases">Prepare-se para lançamentos futuros<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 Prepare-se para lançamentos futuros" title="Link direto para Prepare-se para lançamentos futuros" translate="no">​</a></h3>
<p>Nada aqui é necessário para atualizar para a 0.19; seu código continua funcionando como está. Cada item vai quebrar em um lançamento futuro,
então atualizar agora torna aquela atualização trivial.</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_Qii3" id="future-pk-args">Os args de Entity.pk() são 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 Os args de Entity.pk() são readonly" title="Link direto para Os args de Entity.pk() são readonly" translate="no">​</a></h4>
<p>Pule isto se você não sobrescreve <code>static pk()</code> com um parâmetro <code>args</code> tipado.</p>
<p><a class="" href="https://dataclient.io/pt-BR/rest/api/Entity#pk">Entity.pk()</a> agora tipa <code>args</code> como <code>readonly any[]</code>. Sobrescritas que o anotam como um array
mutável ainda compilam por enquanto, mas um lançamento futuro exigirá <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">createDataClient() do Vue<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 createDataClient() do Vue" title="Link direto para createDataClient() do Vue" translate="no">​</a></h4>
<p>Pule isto se você instala a store com <code>app.use(DataClientPlugin)</code>.</p>
<p><code>createDataClient()</code> e <code>ProvidedDataClient</code> são internos ao <a class="" href="https://dataclient.io/pt-BR/vue/api/DataClientPlugin">DataClientPlugin</a> e
deixarão de ser exportados. Em vez disso, instale o plugin e leia o controller com
<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">waitForNextUpdate() do renderDataCompose() do Vue<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 waitForNextUpdate() do renderDataCompose() do Vue" title="Link direto para waitForNextUpdate() do renderDataCompose() do Vue" translate="no">​</a></h4>
<p>Pule isto se seus testes de Vue não chamam <code>waitForNextUpdate()</code>.</p>
<p>O <code>waitForNextUpdate()</code> de <a class="" href="https://dataclient.io/pt-BR/vue/guides/unit-testing-composables#renderdatacompose-api">renderDataCompose()</a> desiste
silenciosamente após 1 segundo, então um teste pode passar enquanto o composable ainda está suspenso. Ele será removido. Em vez disso, use <code>await</code> no
resultado e chame <code>allSettled()</code> após mudar props ou chamar o controller; agora ele também espera a
busca iniciada por uma mudança de prop. <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">Suporte à atualização<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 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="Releases" term="Releases"/>
        <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 small_xksL">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">Resultado</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"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">Skills</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">OpenSkills</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Claude Code</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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><br></div><div class="token-line" 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"> migrations@data-client</span><br></div></code></pre></div></div></div></div></div>
<p>Caso contrário, execute o <a href="https://dataclient.io/pt-BR/assets/files/v0.18-5ec0344d0d163e58306aa7410b310adc.js" target="_blank" class="">codemod</a> diretamente — ele cobre os casos comuns:</p>
<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" 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>
<!-- -->
<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="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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></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"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">Skills</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">OpenSkills</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Claude Code</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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><br></div><div class="token-line" 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"> migrations@data-client</span><br></div></code></pre></div></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="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" 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>
<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="Releases" term="Releases"/>
        <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">Resultado</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>
<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-707adcbfbd8ee35f345c0e7d96ac2d52.js" target="_blank" class="">codemod</a> automatizado para todas as mudanças incompatíveis:</p>
<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" 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>
<!-- -->
<!-- -->
<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">Resultado</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>
<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="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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></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-707adcbfbd8ee35f345c0e7d96ac2d52.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="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" 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>
<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"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_l0OV tabs__item--active">Skills</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">OpenSkills</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_l0OV">Claude Code</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_wHwb"><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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><br></div><div class="token-line" 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"> migrations@data-client</span><br></div></code></pre></div></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="Releases" term="Releases"/>
        <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-119a0ab6f34405e8dfc754abe4a0c949.js" target="_blank" class="">codemod</a> automatizado para as mudanças incompatíveis mais comuns:</p>
<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" 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>
<!-- -->
<!-- -->
<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="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" 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>
<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="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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></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-119a0ab6f34405e8dfc754abe4a0c949.js" target="_blank" class="">codemod</a> automatizado trata as mudanças incompatíveis abaixo:</p>
<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" 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>
<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="Releases" term="Releases"/>
        <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="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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></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="Releases" term="Releases"/>
        <category label="Managers" term="Managers"/>
        <category label="Performance" term="Performance"/>
    </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 tabindex="0" class="row_OlYf"><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">Client fetch<!-- --> <!-- -->1200<!-- --> <!-- -->ms<!-- --> → <!-- -->Data Client<!-- --> <strong>400<!-- --> <!-- -->ms</strong></span></div><div tabindex="0" class="row_OlYf"><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">Client fetch<!-- --> <!-- -->1810<!-- --> <!-- -->ms<!-- --> → <!-- -->Data Client<!-- --> <strong>3<!-- --> <!-- -->ms</strong></span></div><div tabindex="0" class="row_OlYf"><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">Client fetch<!-- --> <!-- -->310<!-- --> <!-- -->ms<!-- --> → <!-- -->Data Client<!-- --> <strong>46<!-- --> <!-- -->ms</strong></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="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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></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="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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></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="Releases" term="Releases"/>
        <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="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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></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="Releases" term="Releases"/>
        <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="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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></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="Releases" term="Releases"/>
        <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="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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></div><div role="tabpanel" class="tabItem_wHwb" hidden=""><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" 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></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="Releases" term="Releases"/>
        <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">Resultado</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>
<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="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" 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>
</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="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" 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>
</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="Releases" term="Releases"/>
        <category label="REST" term="REST"/>
        <category label="Resources" term="Resources"/>
        <category label="Endpoint" term="Endpoint"/>
        <category label="Collections" term="Collections"/>
    </entry>
</feed>