<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>Author at Infinum</title>
		<atom:link href="https://infinum.com/blog/author/danijel-buhin/feed/" rel="self" type="application/rss+xml" />
		<link></link>
		<description>Building digital products</description>
		<lastBuildDate>Thu, 30 Apr 2026 13:44:05 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>7917https://infinum.com/uploads/2021/03/working-with-JSON-API-0.webp</url>
				</image>
				<title>Working with JSON API, Hassle-Free</title>
				<link>https://infinum.com/blog/working-with-json-api/</link>
				<pubDate>Wed, 17 Mar 2021 11:15:00 +0000</pubDate>
				<dc:creator>Danijel Buhin</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/working-with-json-api/</guid>
				<description>
					<![CDATA[<p>How we efficiently stopped bikeshedding about our API requests.</p>
<p>The post <a href="https://infinum.com/blog/working-with-json-api/">Working with JSON API, Hassle-Free</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-392"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	Ever wished to avoid long conversations with your backend devs about how your API should be structured? Trying to focus less on your requests/responses once you set them up properly?</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-97'
	>
	If you’d like to take advantage of efficient caching strategies, let me introduce you to <a href="https://jsonapi.org/">JSON API</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-99">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-100'
	>
	JSON API Spec</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-102">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-103'
	>
	Without diving into a deep explanation of the JSON API spec, take a look at the core concepts to understand how both JSON API is structured and how datx works with it.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-105">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-106'
	>
	Let’s examine the following example:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-109"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-json github-light" data-language="json" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #005cc5;">&quot;</span><span class="token" style="color: #005cc5;">type</span><span class="token" style="color: #005cc5;">&quot;</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">users</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #005cc5;">&quot;</span><span class="token" style="color: #005cc5;">id</span><span class="token" style="color: #005cc5;">&quot;</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">1</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #005cc5;">&quot;</span><span class="token" style="color: #005cc5;">attributes</span><span class="token" style="color: #005cc5;">&quot;</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">&quot;</span><span class="token" style="color: #005cc5;">full_name</span><span class="token" style="color: #005cc5;">&quot;</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">Danijel Buhin</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">&quot;</span><span class="token" style="color: #005cc5;">username</span><span class="token" style="color: #005cc5;">&quot;</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">buha</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">&quot;</span><span class="token" style="color: #005cc5;">role</span><span class="token" style="color: #005cc5;">&quot;</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">moderator</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #005cc5;">&quot;</span><span class="token" style="color: #005cc5;">relationships</span><span class="token" style="color: #005cc5;">&quot;</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #005cc5;">&quot;</span><span class="token" style="color: #005cc5;">posts</span><span class="token" style="color: #005cc5;">&quot;</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #005cc5;">&quot;</span><span class="token" style="color: #005cc5;">data</span><span class="token" style="color: #005cc5;">&quot;</span><span class="token">:</span><span class="token"> </span><span class="token">[</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token" style="color: #005cc5;">&quot;</span><span class="token" style="color: #005cc5;">type</span><span class="token" style="color: #005cc5;">&quot;</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">posts</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token" style="color: #005cc5;">&quot;</span><span class="token" style="color: #005cc5;">id</span><span class="token" style="color: #005cc5;">&quot;</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">9</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">]</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-112"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-110">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-111'
	>
	As described in the JSON API spec for resource object, every object must contain id and type top-level members and may contain attributes, relationships, links, and meta objects.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-115"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-113">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-114'
	>
	Our example is a simple user model that has a reference to many post models.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-118"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-116">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-117'
	>
	When we make a request to <code>https://website.com/api/users/1</code>, we should receive this object back along with the array of posts.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-121"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-119">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-120'
	>
	Modeling on frontend</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-124"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-122">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-123'
	>
	Now that we know what we will receive from the backend, it is time to create the same models on the frontend side.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-127"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-125">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-126'
	>
	For that, we use datx with JSON API mixin.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-130"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-128">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-129'
	>
	What is datx?</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-133"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-131">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-132'
	>
	Datx is a data store for use with the mobx state management library. It features support for observable properties (<code>Attribute()</code>), references to other models (<code>Attribute({toMany: ‘posts’})</code>) and first-class TypeScript support. It’s framework-agnostic so you can use just like mobx, from vanilla javascript to the newest framework out there.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-136"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-134">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-135'
	>
	JSON API mixin is an opt-in package and it basically giving our models and store level-up functionality for usage with JSON API specification (e.g. giving CRUD methods to the models and collection).</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-139"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-137">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-138'
	>
	For more in-depth information you can visit <a href="https://datx.dev">datx documentation</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-142"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-140">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-141'
	>
	Defining our model</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-145"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-143">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-144'
	>
	Looking at the user object that we receive from the backend, we can now easily create our model on the frontend. We will not bother with the Post model now, let’s just pretend that it exists.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-148"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-146">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-147'
	>
	Now, our base model gets the full power of <a href="https://datx.dev/docs/jsonapi/jsonapi-model">jsonapi mixin methods</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-150"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Model</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">Attribute</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">@</span><span class="token" style="color: #24292e;">datx</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">core</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">jsonapi</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">@</span><span class="token" style="color: #24292e;">datx</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">jsonapi</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Post</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">.</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">models</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">Post</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">class</span><span class="token"> </span><span class="token" style="color: #6f42c1;">User</span><span class="token"> </span><span class="token" style="color: #d73a49;">extends</span><span class="token"> </span><span class="token" style="color: #6f42c1;">jsonapi</span><span class="token">(</span><span class="token" style="color: #24292e;">Model</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #d73a49;">static</span><span class="token"> </span><span class="token" style="color: #e36209;">type</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">users</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">@</span><span class="token" style="color: #6f42c1;">Attribute</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token">isIdentifier</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">true</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #e36209;">id</span><span class="token" style="color: #d73a49;">!</span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">string</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">@</span><span class="token" style="color: #6f42c1;">Attribute</span><span class="token">(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #e36209;">username</span><span class="token" style="color: #d73a49;">!</span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">string</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">@</span><span class="token" style="color: #6f42c1;">Attribute</span><span class="token">(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #e36209;">role</span><span class="token" style="color: #d73a49;">!</span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">string</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">@</span><span class="token" style="color: #6f42c1;">Attribute</span><span class="token">(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #e36209;">full_name</span><span class="token" style="color: #d73a49;">!</span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">string</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">@</span><span class="token" style="color: #6f42c1;">Attribute</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token">toMany</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #24292e;">Post</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #e36209;">posts</span><span class="token" style="color: #d73a49;">!</span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #6f42c1;">Post</span><span class="token">[</span><span class="token">]</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-153"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-151">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-152'
	>
	Let’s break this example to smaller pieces:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-156"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-154">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-155'
	>
	<strong>1. We define our User model by extending datx’s Model class wrapped into the JSON API mixin</strong>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-159"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-157">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-158'
	>
	We assign a static type property that in the real world example you want to name by exactly the type property in the resource object you get back from the server.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-162"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-160">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-161'
	>
	Type also serves as a root endpoint for these models and in case that type and endpoint are different (e.g endpoint is plural and type is singular) you can assign another static property called endpoint.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-165"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-163">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-164'
	>
	In this case, when you make a request to the server with the model (this will be a link to the section below) it will point to the <code>/api/v1/forumUsers</code> and you will receive back users type.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-167"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Model</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">Attribute</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">@</span><span class="token" style="color: #24292e;">datx</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">core</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">jsonapi</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">@</span><span class="token" style="color: #24292e;">datx</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">jsonapi</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Post</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">.</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">models</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">Post</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">class</span><span class="token"> </span><span class="token" style="color: #6f42c1;">User</span><span class="token"> </span><span class="token" style="color: #d73a49;">extends</span><span class="token"> </span><span class="token" style="color: #6f42c1;">jsonapi</span><span class="token">(</span><span class="token" style="color: #24292e;">Model</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #d73a49;">static</span><span class="token"> </span><span class="token" style="color: #e36209;">type</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">users</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #d73a49;">static</span><span class="token"> </span><span class="token" style="color: #e36209;">endpoint</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">forumUsers</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-170"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-168">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-169'
	>
	<strong>2. We populate our model with the attributes we expect from the backend and their type (if you’re into typescript).</strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-173"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-171">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-172'
	>
	Note that we set id as an attribute, although id is listed as a top-level member of a resource object. In this case, that same id will be assigned to our id attribute.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-175"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">@</span><span class="token" style="color: #6f42c1;">Attribute</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token">isIndentifier</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">true</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #24292e;">public</span><span class="token"> </span><span class="token" style="color: #24292e;">id</span><span class="token" style="color: #d73a49;">!</span><span class="token">: </span><span class="token" style="color: #24292e;">string</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">@</span><span class="token" style="color: #6f42c1;">Attribute</span><span class="token">(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #24292e;">public</span><span class="token"> </span><span class="token" style="color: #24292e;">username</span><span class="token" style="color: #d73a49;">!</span><span class="token">: </span><span class="token" style="color: #24292e;">string</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">@</span><span class="token" style="color: #6f42c1;">Attribute</span><span class="token">(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #24292e;">public</span><span class="token"> </span><span class="token" style="color: #24292e;">role</span><span class="token" style="color: #d73a49;">!</span><span class="token">: </span><span class="token" style="color: #24292e;">string</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">@</span><span class="token" style="color: #6f42c1;">Attribute</span><span class="token">(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #24292e;">public</span><span class="token"> </span><span class="token" style="color: #24292e;">full_name</span><span class="token" style="color: #d73a49;">!</span><span class="token">: </span><span class="token" style="color: #24292e;">string</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-178"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-176">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-177'
	>
	<strong>3. We define our last attribute that is also a relationship or has a reference to other models. In this case, it is an array of Post models.</strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-180"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">@</span><span class="token" style="color: #6f42c1;">Attribute</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token">toMany</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #24292e;">Post</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #24292e;">public</span><span class="token"> </span><span class="token" style="color: #24292e;">posts</span><span class="token" style="color: #d73a49;">!</span><span class="token">: </span><span class="token" style="color: #24292e;">Post</span><span class="token">[</span><span class="token">]</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-183"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-181">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-182'
	>
	Defining our store (collection)</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-186"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-184">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-185'
	>
	Now that we have our models up and running, now we have to create our store to manage them.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-189"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-187">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-188'
	>
	We create our store by extending the Collection class from datx wrapped in JSON API mixin.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-192"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-190">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-191'
	>
	Also, with the config from @datx/jsonapi, we set our baseUrl that will be used for fetching our models.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-195"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-193">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-194'
	>
	You can see a more in-depth configuration in the <a href="https://datx.dev/docs/jsonapi/jsonapi-network-configuration">datx docs</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-198"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-196">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-197'
	>
	We define which types (models) are going to be used and stored within this collection, and now we’re good to go, our collection is now fully empowered by the <a href="https://datx.dev/docs/jsonapi/jsonapi-collection">jsonapi methods</a>, just like our models.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-200"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Collection</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">@</span><span class="token" style="color: #24292e;">datx</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">core</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">jsonapi</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">config</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">@</span><span class="token" style="color: #24292e;">datx</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">jsonapi</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Post</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">.</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">models</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">Post</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">User</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">.</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">models</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">User</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #24292e;">config</span><span class="token">.</span><span class="token" style="color: #24292e;">baseUrl</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #6f42c1;">https</span><span class="token">:</span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;">website.com/api&amp;#8217;;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> ...other config stuff if needed</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">class</span><span class="token"> </span><span class="token" style="color: #6f42c1;">AppStore</span><span class="token"> </span><span class="token" style="color: #d73a49;">extends</span><span class="token"> </span><span class="token" style="color: #6f42c1;">jsonapi</span><span class="token">(</span><span class="token" style="color: #24292e;">Collection</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #d73a49;">static</span><span class="token"> </span><span class="token" style="color: #e36209;">types</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #24292e;">Post</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">User</span><span class="token">]</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-203"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-201">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-202'
	>
	Making the requests</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-206"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-204">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-205'
	>
	Let’s now explore how those JSON API methods on model and collection actually work. As I mentioned earlier, datx is a framework-agnostic library, but for these examples, we will use React.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-209"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-207">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-208'
	>
	First, we must make sure that our React app is set up properly. I will not bother you with that here, you can check out the documentation for the <a href="https://datx.dev/docs/examples/react-setup">guide</a> on how to set up the React app with datx.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-212"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-210">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-211'
	>
	Fetching users (Collection.getMany())</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-215"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-213">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-214'
	>
	Let&#8217;s first fetch all of our users and display them (for example for a landing page).</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-217"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">useEffect</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">useState</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token" style="color: #24292e;">react</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">useStore</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">.</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">hooks</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">useStore</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">User</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">.</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">store</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">models</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">Post</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">LandingPage</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">store</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useStore</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">isFetching</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setIsFetching</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(</span><span class="token" style="color: #005cc5;">true</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">usersData</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setUsersData</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">&lt;</span><span class="token" style="color: #6f42c1;">User</span><span class="token">[</span><span class="token">]</span><span class="token">&gt;</span><span class="token">(</span><span class="token">[</span><span class="token">]</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">async</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">getUsers</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">response</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #d73a49;">await</span><span class="token"> </span><span class="token" style="color: #24292e;">store</span><span class="token">.</span><span class="token" style="color: #6f42c1;">getMany</span><span class="token">(</span><span class="token" style="color: #24292e;">User</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">setUsersData</span><span class="token">(</span><span class="token" style="color: #24292e;">response</span><span class="token">.</span><span class="token" style="color: #24292e;">data</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">setIsFetching</span><span class="token">(</span><span class="token" style="color: #005cc5;">false</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">useEffect</span><span class="token">(</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">getUsers</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">,</span><span class="token"> </span><span class="token">[</span><span class="token">]</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">&lt;</span><span class="token" style="color: #6f42c1;">div</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">{</span><span class="token" style="color: #e36209;">isFetching</span><span class="token"> &amp;&amp; &amp;#8217;</span><span class="token" style="color: #e36209;">Loading</span><span class="token"> </span><span class="token" style="color: #e36209;">users</span><span class="token">...&amp;#8217;</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">{</span><span class="token">!</span><span class="token" style="color: #e36209;">isFetching</span><span class="token"> &amp;&amp; (
</span></span><span class="line"><span class="token">        &lt;</span><span class="token" style="color: #e36209;">ul</span><span class="token">&gt;
</span></span><span class="line"><span class="token">          </span><span class="token">{</span><span class="token" style="color: #e36209;">usersData</span><span class="token">.</span><span class="token" style="color: #e36209;">map</span><span class="token">((</span><span class="token" style="color: #e36209;">user</span><span class="token">) </span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #24292e;">li</span><span class="token"> </span><span class="token" style="color: #24292e;">key</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token">user.</span><span class="token" style="color: #24292e;">id</span><span class="token">}</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token">{</span><span class="token" style="color: #e36209;">user</span><span class="token">.</span><span class="token" style="color: #e36209;">full_name</span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">-</span><span class="token"> </span><span class="token" style="color: #24292e;">Posted</span><span class="token"> </span><span class="token">{</span><span class="token" style="color: #e36209;">user</span><span class="token">.</span><span class="token" style="color: #e36209;">posts</span><span class="token">.</span><span class="token" style="color: #e36209;">length</span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #e36209;">posts</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">li</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">)</span><span class="token">)</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">        &lt;/</span><span class="token" style="color: #e36209;">ul</span><span class="token">&gt;
</span></span><span class="line"><span class="token">      )</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">div</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-220"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-218">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-219'
	>
	So basically, nothing spectacular going on here if you’re used to React code, the main thing to notice here is that we use our store to fetch User models from the server with <em>getMany()</em> method.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-223"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-221">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-222'
	>
	Using this method, you pass a model constructor (or model type as a string) as a first parameter, and datx will make a request to the API. URL path will be structured like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-225"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #24292e;">base_url</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">model_type</span><span class="token" style="color: #d73a49;">|</span><span class="token" style="color: #24292e;">model_endpoint</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-228"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-226">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-227'
	>
	Base URL that we’ve declared to the network configuration, and model’s type (or endpoint if they differ). So in this case our URL is <code>https://website.com/api/users</code>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-231"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-229">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-230'
	>
	Fetching user (Collection.getOne())</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-234"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-232">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-233'
	>
	Now when we route to the user profile page, we can grab the id from the query params to fetch a specific user from the API.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-236"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">useEffect</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">useState</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">useCallback</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token" style="color: #24292e;">react</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">useParams</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token" style="color: #24292e;">react</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">router</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">dom</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">useStore</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">.</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">hooks</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">useStore</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">User</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">.</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">store</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">models</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">Post</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">UserProfile</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">store</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useStore</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">params</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useParams</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">isFetching</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setIsFetching</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(</span><span class="token" style="color: #005cc5;">true</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">user</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setUser</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">&lt;</span><span class="token" style="color: #6f42c1;">User</span><span class="token">&gt;</span><span class="token">(</span><span class="token" style="color: #005cc5;">null</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">getUser</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useCallback</span><span class="token">(</span><span class="token" style="color: #6f42c1;">async</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    const </span><span class="token" style="color: #24292e;">response</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #d73a49;">await</span><span class="token"> </span><span class="token" style="color: #24292e;">store</span><span class="token">.</span><span class="token" style="color: #6f42c1;">getOne</span><span class="token">(</span><span class="token" style="color: #24292e;">User</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">params</span><span class="token">.</span><span class="token" style="color: #24292e;">id</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">setUser</span><span class="token">(</span><span class="token">response.data</span><span class="token">)</span><span class="token">;
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">setIsFetching</span><span class="token">(</span><span class="token" style="color: #e36209;">false</span><span class="token">)</span><span class="token">;
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">,</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #24292e;">store</span><span class="token">]</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">useEffect</span><span class="token">(</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">getUser</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">,</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #24292e;">getUser</span><span class="token">]</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">&lt;</span><span class="token" style="color: #6f42c1;">div</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">{</span><span class="token" style="color: #e36209;">isFetching</span><span class="token"> &amp;&amp; &amp;#8217;</span><span class="token" style="color: #e36209;">Loading</span><span class="token"> </span><span class="token" style="color: #e36209;">user</span><span class="token"> </span><span class="token" style="color: #e36209;">information</span><span class="token">...&amp;#8217;</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">{</span><span class="token">!</span><span class="token" style="color: #e36209;">isFetching</span><span class="token"> &amp;&amp; (
</span></span><span class="line"><span class="token">        &lt;</span><span class="token" style="color: #e36209;">div</span><span class="token">&gt;
</span></span><span class="line"><span class="token">          &lt;</span><span class="token" style="color: #e36209;">h1</span><span class="token">&gt;</span><span class="token">{</span><span class="token" style="color: #e36209;">user</span><span class="token">.</span><span class="token" style="color: #e36209;">full_name</span><span class="token">}</span><span class="token">&lt;/</span><span class="token" style="color: #e36209;">h1</span><span class="token">&gt;
</span></span><span class="line"><span class="token">          &lt;</span><span class="token" style="color: #e36209;">h2</span><span class="token">&gt;</span><span class="token" style="color: #e36209;">Posts</span><span class="token">:</span><span class="token"> </span><span class="token">(</span><span class="token">{</span><span class="token">user.posts.</span><span class="token" style="color: #24292e;">length</span><span class="token">}</span><span class="token">)</span><span class="token">&lt;/</span><span class="token" style="color: #e36209;">h2</span><span class="token">&gt;
</span></span><span class="line"><span class="token">          &lt;</span><span class="token" style="color: #e36209;">hr</span><span class="token"> /&gt;
</span></span><span class="line"><span class="token">          &lt;</span><span class="token" style="color: #e36209;">ul</span><span class="token">&gt;
</span></span><span class="line"><span class="token">            </span><span class="token">{</span><span class="token" style="color: #e36209;">user</span><span class="token">.</span><span class="token" style="color: #e36209;">posts</span><span class="token">.</span><span class="token" style="color: #e36209;">map</span><span class="token">((</span><span class="token" style="color: #e36209;">post</span><span class="token">) </span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #24292e;">li</span><span class="token"> </span><span class="token" style="color: #24292e;">key</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token">post.</span><span class="token" style="color: #24292e;">id</span><span class="token">}</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">{</span><span class="token" style="color: #e36209;">post</span><span class="token">.</span><span class="token" style="color: #e36209;">title</span><span class="token">}</span><span class="token"> </span><span class="token">{</span><span class="token" style="color: #e36209;">post</span><span class="token">.</span><span class="token" style="color: #e36209;">likes_count</span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #e36209;">likes</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">li</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">)</span><span class="token">)</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">          &lt;/</span><span class="token" style="color: #e36209;">ul</span><span class="token">&gt;
</span></span><span class="line"><span class="token">        &lt;/</span><span class="token" style="color: #e36209;">div</span><span class="token">&gt;
</span></span><span class="line"><span class="token">      )</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">div</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-239"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-237">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-238'
	>
	Here we use <em>getOne()</em> method to fetch a single Model from the API. We pass a User model constructor as a first argument, and id of the model we want to grab as the second parameter.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-242"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-240">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-241'
	>
	In this case, the URL structure would look like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-244"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #24292e;">base_url</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">model_type</span><span class="token" style="color: #d73a49;">|</span><span class="token" style="color: #24292e;">model_endpoint</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">model_id</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-247"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-245">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-246'
	>
	And the actual URL would be <code>https://website.com/api/users/1</code>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-250"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-248">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-249'
	>
	Updating user (Model.save())</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-253"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-251">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-252'
	>
	Let’s pretend that on our UserProfile page, we have a form component to update our information (in case we are watching our own profile). In our case, we would like to update our full name that is displayed to all users.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-256"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-254">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-255'
	>
	For that, we will use save() method on our User model. Model.save() method will either create a new on the backend (POST) or update a current one (PATCH), depending on the current state of the model.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-259"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-257">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-258'
	>
	So, when we hit that submit button in our form, the flow should look like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-261"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">useState</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token" style="color: #24292e;">react</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">useStore</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">.</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">hooks</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">useStore</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">EditUserInfo</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #e36209;">user</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">store</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useStore</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">isFetching</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setIsFetching</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(</span><span class="token" style="color: #005cc5;">true</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">value</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setValue</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(</span><span class="token" style="color: #24292e;">user</span><span class="token">.</span><span class="token" style="color: #24292e;">full_name</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">handleChange</span><span class="token">(</span><span class="token" style="color: #e36209;">event</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">setValue</span><span class="token">(</span><span class="token" style="color: #24292e;">event</span><span class="token">.</span><span class="token" style="color: #24292e;">target</span><span class="token">.</span><span class="token" style="color: #24292e;">value</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">async</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">handleSubmit</span><span class="token">(</span><span class="token" style="color: #e36209;">event</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #24292e;">event</span><span class="token">.</span><span class="token" style="color: #6f42c1;">preventDefault</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">setIsFetching</span><span class="token">(</span><span class="token" style="color: #005cc5;">true</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">try</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #24292e;">user</span><span class="token">.</span><span class="token" style="color: #24292e;">full_name</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #24292e;">value</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #d73a49;">await</span><span class="token"> </span><span class="token" style="color: #24292e;">user</span><span class="token">.</span><span class="token" style="color: #6f42c1;">save</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">catch</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #24292e;">response</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> handle response</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">finally</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #6f42c1;">setIsFetching</span><span class="token">(</span><span class="token" style="color: #005cc5;">false</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">&lt;</span><span class="token" style="color: #6f42c1;">div</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #24292e;">form</span><span class="token"> </span><span class="token" style="color: #24292e;">onSubmit</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #24292e;">handleSubmit</span><span class="token">}</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #24292e;">input</span><span class="token"> </span><span class="token" style="color: #24292e;">name</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">full_name</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #24292e;">id</span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">full_name</span><span class="token" style="color: #032f62;">&quot;</span><span class="token"> </span><span class="token" style="color: #24292e;">value</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #24292e;">value</span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #24292e;">onChange</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #24292e;">handleChange</span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">&lt;</span><span class="token" style="color: #6f42c1;">button</span><span class="token">&gt;</span><span class="token" style="color: #24292e;">Save</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">button</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">form</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">div</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-264"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-262">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-263'
	>
	So, we directly mutate a user model, in this case, full_name attribute, and execute save() method. In case everything went well, our model is updated on both frontend and backend.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-267"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-265">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-266'
	>
	Deleting a post (Model.destroy() / Collection.removeAll())</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-270"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-268">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-269'
	>
	Just like any other API method we explored, destroying a model is just as easy.<br>Since our role on this app is “moderator”, we can easily remove any unwanted posts.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-273"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-271">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-272'
	>
	Let’s say we have a Dashboard with all reported posts, we can easily create methods for destroying a specific post model, or maybe wipe out the entire list of reported posts.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-276"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-274">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-275'
	>
	In case we’re not sure if all posts are against our app’s guidelines, we can examine them one by one first and remove them accordingly.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-279"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-277">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-278'
	>
	Let’s take a look at this example:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-281"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">useState</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">useEffect</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">useCallback</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token" style="color: #24292e;">react</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token" style="color: #24292e;">notification</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token" style="color: #24292e;">notification</span><span class="token" style="color: #d73a49;">-</span><span class="token" style="color: #24292e;">library</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">useStore</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">.</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">hooks</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">useStore</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #24292e;">Post</span><span class="token"> </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">from</span><span class="token"> &amp;#8217</span><span class="token">;</span><span class="token">.</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">store</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">models</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">Post</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">ModeratorDashboard</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">store</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useStore</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">isRemoving</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setIsRemoving</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(</span><span class="token" style="color: #005cc5;">false</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">isFetching</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setIsFetching</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(</span><span class="token" style="color: #005cc5;">true</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #005cc5;">posts</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">setPosts</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useState</span><span class="token">(</span><span class="token">[</span><span class="token">]</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">handleRemoveOne</span><span class="token">(</span><span class="token" style="color: #e36209;">post</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token" style="color: #d73a49;">async</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #6f42c1;">setIsRemoving</span><span class="token">(</span><span class="token" style="color: #005cc5;">true</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #d73a49;">try</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">await</span><span class="token"> </span><span class="token" style="color: #24292e;">post</span><span class="token">.</span><span class="token" style="color: #6f42c1;">destroy</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #24292e;">notification</span><span class="token">.</span><span class="token" style="color: #6f42c1;">success</span><span class="token">(</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">Post</span><span class="token"> </span><span class="token" style="color: #24292e;">successfully</span><span class="token"> </span><span class="token" style="color: #24292e;">removed</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">catch</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #24292e;">response</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> handle response</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">finally</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6f42c1;">setIsRemoving</span><span class="token">(</span><span class="token" style="color: #005cc5;">false</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">async</span><span class="token"> </span><span class="token" style="color: #d73a49;">function</span><span class="token"> </span><span class="token" style="color: #6f42c1;">handleRemoveAll</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">setIsRemoving</span><span class="token">(</span><span class="token" style="color: #005cc5;">true</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">try</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #d73a49;">await</span><span class="token"> </span><span class="token" style="color: #24292e;">store</span><span class="token">.</span><span class="token" style="color: #6f42c1;">removeAll</span><span class="token">(</span><span class="token" style="color: #24292e;">posts</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #24292e;">notification</span><span class="token">.</span><span class="token" style="color: #6f42c1;">success</span><span class="token">(</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">Posts</span><span class="token"> </span><span class="token" style="color: #24292e;">successfully</span><span class="token"> </span><span class="token" style="color: #24292e;">removed</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">catch</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #24292e;">response</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> handle response</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">finally</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #6f42c1;">setIsRemoving</span><span class="token">(</span><span class="token" style="color: #005cc5;">false</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token" style="color: #6f42c1;">setPosts</span><span class="token">(</span><span class="token">[</span><span class="token">]</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">fetchPosts</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #6f42c1;">useCallback</span><span class="token">(</span><span class="token" style="color: #d73a49;">async</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">const</span><span class="token"> </span><span class="token" style="color: #005cc5;">response</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #d73a49;">await</span><span class="token"> </span><span class="token" style="color: #24292e;">store</span><span class="token">.</span><span class="token" style="color: #6f42c1;">getMany</span><span class="token">(</span><span class="token" style="color: #24292e;">Post</span><span class="token">,</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">queryParams</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">filter</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">          </span><span class="token">status</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">reported</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">}</span><span class="token">,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">setPosts</span><span class="token">(</span><span class="token" style="color: #24292e;">response</span><span class="token">.</span><span class="token" style="color: #24292e;">data</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">setIsFetching</span><span class="token">(</span><span class="token" style="color: #005cc5;">false</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">,</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #24292e;">store</span><span class="token">]</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #6f42c1;">useEffect</span><span class="token">(</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">=&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6f42c1;">fetchPosts</span><span class="token">(</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">,</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #24292e;">fetchPosts</span><span class="token">]</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">&lt;</span><span class="token" style="color: #6f42c1;">div</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">{</span><span class="token" style="color: #e36209;">isFetching</span><span class="token"> &amp;&amp; &amp;#8217;</span><span class="token" style="color: #e36209;">Loading</span><span class="token"> </span><span class="token" style="color: #e36209;">users</span><span class="token">...&amp;#8217;</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">{</span><span class="token">!</span><span class="token" style="color: #e36209;">isFetching</span><span class="token"> &amp;&amp; </span><span class="token" style="color: #e36209;">posts</span><span class="token">.</span><span class="token" style="color: #e36209;">length</span><span class="token"> &lt; 1 &amp;#038;&amp;#038; &lt;</span><span class="token" style="color: #e36209;">h1</span><span class="token">&gt;</span><span class="token" style="color: #e36209;">Hurray</span><span class="token">! </span><span class="token" style="color: #e36209;">There</span><span class="token"> </span><span class="token" style="color: #e36209;">is</span><span class="token"> </span><span class="token" style="color: #e36209;">no</span><span class="token"> </span><span class="token" style="color: #e36209;">reported</span><span class="token"> </span><span class="token" style="color: #e36209;">posts</span><span class="token">!&lt;/</span><span class="token" style="color: #e36209;">h1</span><span class="token">&gt;</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">      </span><span class="token">{</span><span class="token">!</span><span class="token" style="color: #e36209;">isFetching</span><span class="token"> &amp;&amp; </span><span class="token" style="color: #e36209;">posts</span><span class="token">.</span><span class="token" style="color: #e36209;">length</span><span class="token"> &gt; 0 &amp;&amp; (
</span></span><span class="line"><span class="token">        &lt;</span><span class="token" style="color: #e36209;">div</span><span class="token">&gt;
</span></span><span class="line"><span class="token">          &lt;</span><span class="token" style="color: #e36209;">h1</span><span class="token">&gt;</span><span class="token" style="color: #e36209;">Reported</span><span class="token"> </span><span class="token" style="color: #e36209;">posts</span><span class="token"> (</span><span class="token">{</span><span class="token" style="color: #e36209;">posts</span><span class="token">.</span><span class="token" style="color: #e36209;">length</span><span class="token">}</span><span class="token">)&lt;/</span><span class="token" style="color: #e36209;">h1</span><span class="token">&gt;
</span></span><span class="line"><span class="token">          &lt;</span><span class="token" style="color: #e36209;">button</span><span class="token"> </span><span class="token" style="color: #e36209;">onClick</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #24292e;">handleRemoveAll</span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #24292e;">disabled</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #24292e;">isRemoving</span><span class="token">}</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">{</span><span class="token" style="color: #e36209;">isRemoving</span><span class="token"> ? &amp;#8217;</span><span class="token" style="color: #e36209;">Please</span><span class="token"> </span><span class="token" style="color: #e36209;">wait</span><span class="token">&amp;#8217; : &amp;#8217;</span><span class="token" style="color: #e36209;">Delete</span><span class="token"> </span><span class="token" style="color: #e36209;">all</span><span class="token">&amp;#8217;</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">          &lt;/</span><span class="token" style="color: #e36209;">button</span><span class="token">&gt;
</span></span><span class="line"><span class="token">          &lt;</span><span class="token" style="color: #e36209;">table</span><span class="token">&gt;
</span></span><span class="line"><span class="token">            &lt;</span><span class="token" style="color: #e36209;">thead</span><span class="token">&gt;
</span></span><span class="line"><span class="token">              &lt;</span><span class="token" style="color: #e36209;">tr</span><span class="token">&gt;
</span></span><span class="line"><span class="token">                &lt;</span><span class="token" style="color: #e36209;">th</span><span class="token">&gt;#&lt;/</span><span class="token" style="color: #e36209;">th</span><span class="token">&gt;
</span></span><span class="line"><span class="token">                &lt;</span><span class="token" style="color: #e36209;">th</span><span class="token">&gt;</span><span class="token" style="color: #e36209;">Title</span><span class="token">&lt;/</span><span class="token" style="color: #e36209;">th</span><span class="token">&gt;
</span></span><span class="line"><span class="token">                &lt;</span><span class="token" style="color: #e36209;">th</span><span class="token">&gt;</span><span class="token" style="color: #e36209;">Author</span><span class="token">&lt;/</span><span class="token" style="color: #e36209;">th</span><span class="token">&gt;
</span></span><span class="line"><span class="token">              &lt;/</span><span class="token" style="color: #e36209;">tr</span><span class="token">&gt;
</span></span><span class="line"><span class="token">            &lt;/</span><span class="token" style="color: #e36209;">thead</span><span class="token">&gt;
</span></span><span class="line"><span class="token">            &lt;</span><span class="token" style="color: #e36209;">tbody</span><span class="token">&gt;
</span></span><span class="line"><span class="token">              </span><span class="token">{</span><span class="token" style="color: #e36209;">posts</span><span class="token">.</span><span class="token" style="color: #e36209;">map</span><span class="token">((</span><span class="token" style="color: #e36209;">post</span><span class="token">) </span><span class="token" style="color: #d73a49;">=</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #24292e;">tr</span><span class="token"> </span><span class="token" style="color: #24292e;">key</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token">post.</span><span class="token" style="color: #24292e;">id</span><span class="token">}</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                  </span><span class="token">&lt;</span><span class="token" style="color: #6f42c1;">td</span><span class="token">&gt;</span><span class="token">{</span><span class="token">post.</span><span class="token" style="color: #24292e;">id</span><span class="token">}</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">td</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                  </span><span class="token">&lt;</span><span class="token" style="color: #6f42c1;">td</span><span class="token">&gt;</span><span class="token">{</span><span class="token">post.</span><span class="token" style="color: #24292e;">title</span><span class="token">}</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">td</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                  </span><span class="token">&lt;</span><span class="token" style="color: #6f42c1;">td</span><span class="token">&gt;</span><span class="token">{</span><span class="token">post.</span><span class="token" style="color: #24292e;">author</span><span class="token">}</span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">td</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                  </span><span class="token">&lt;</span><span class="token" style="color: #6f42c1;">td</span><span class="token">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #24292e;">button</span><span class="token"> </span><span class="token" style="color: #24292e;">onClick</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #6f42c1;">handleRemoveOne</span><span class="token">(</span><span class="token">post.id</span><span class="token">)</span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #24292e;">disabled</span><span class="token" style="color: #d73a49;">=</span><span class="token">{</span><span class="token" style="color: #24292e;">isRemoving</span><span class="token">}</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                      </span><span class="token" style="color: #e36209;">x</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">button</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                  </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">td</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">tr</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">              </span><span class="token">)</span><span class="token">)</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">            &lt;/</span><span class="token" style="color: #e36209;">tbody</span><span class="token">&gt;
</span></span><span class="line"><span class="token">          &lt;/</span><span class="token" style="color: #e36209;">table</span><span class="token">&gt;
</span></span><span class="line"><span class="token">        &lt;/</span><span class="token" style="color: #e36209;">div</span><span class="token">&gt;
</span></span><span class="line"><span class="token">      )</span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #24292e;">div</span><span class="token" style="color: #d73a49;">&gt;</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-284"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-282">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-283'
	>
	First, we fetch all posts that have “reported” status, so we could easily track any unwanted posts. Here you can see all available <a href="https://datx.dev/docs/jsonapi/jsonapi-typescript-interfaces#irequestoptions">request options</a> that you can pass to model or collection API methods.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-287"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-285">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-286'
	>
	handleRemoveOne function in our component expects a <code>post</code> instance which we will use to execute the <code>destroy()</code> method on datx Model.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-290"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-288">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-289'
	>
	In case we want to wipe out the entire list, we execute store.removeAll() that will clear our list of posts.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-293"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-291">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-292'
	>
	For those who want to know more</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-296"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-294">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-295'
	>
	Because everybody loves a little extra.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-299"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-297">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-298'
	>
	Pagination</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-302"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-300">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-301'
	>
	When using pagination, we should, by the specification, receive a 4 keys in a top-level links object:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-305"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-303">
	<ul	class='typography typography--size-16-text-roman typography--hyphens js-typography lists__typography'
	data-id='es-304'
	>
	<li>first: the first page</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-308"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-306">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-307'
	>
	<li>last: the last page</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-311"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-309">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-310'
	>
	<li>prev: the previous page</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-314"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-312">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-313'
	>
	<li>next: the next page</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-317"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-315">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-316'
	>
	In case some of the links are unavailable, (e.g we are on the last page, and next should not exist) the key must have a value of null.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-321"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--black block-bullet__bullet" data-id="es-318">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-319'
	>
	1</p>	<div class="bullet__content">
		<p	class='typography typography--size-16-text-roman js-typography bullet__paragraph'
	data-id='es-320'
	>
	<strong>Manually building URL with page parameters</strong><br />
If we use pagination manually, we should set <span style="color: var(--typography-color);font-family: var(--typography-font-family);font-size: var(--typography-font-size);font-weight: var(--typography-font-weight);letter-spacing: var(--typography-letter-spacing);text-transform: var(--typography-uppercase,normal)">a </span><code>page</code><span style="color: var(--typography-color);font-family: var(--typography-font-family);font-size: var(--typography-font-size);font-weight: var(--typography-font-weight);letter-spacing: var(--typography-letter-spacing);text-transform: var(--typography-uppercase,normal)"> query parameter following the pagination strategy. For example: </span><code>&amp;#8230;/api/v1/posts?page[size]=20&amp;#038;page[number]=2</code><span style="color: var(--typography-color);font-family: var(--typography-font-family);font-size: var(--typography-font-size);font-weight: var(--typography-font-weight);letter-spacing: var(--typography-letter-spacing);text-transform: var(--typography-uppercase,normal)"> means that we will get 20 results per page and we want to get a second page from the server.</span></p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-325"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--number bullet__color--black block-bullet__bullet" data-id="es-322">
	<p	class='typography typography--size-14-text js-typography bullet__dot'
	data-id='es-323'
	>
	2</p>	<div class="bullet__content">
		<p	class='typography typography--size-16-text-roman js-typography bullet__paragraph'
	data-id='es-324'
	>
	<strong>Using data to automatically fetch new results</strong><br />
You can use the response object and fetch new data based on your requirement, in <a href="https://datx.dev/docs/jsonapi/jsonapi-network-usage#pagination-example">this example</a> you can see how to fetch all results from the backend.</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-328"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-326">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-327'
	>
	Query parameters</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-331"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-329">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-330'
	>
	Query parameters are part of the <a href="https://datx.dev/docs/jsonapi/jsonapi-typescript-interfaces#irequestoptions">RequestOptions</a> object in datx, and you would use it like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-333"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #24292e;">store</span><span class="token">.</span><span class="token" style="color: #6f42c1;">request</span><span class="token">(</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">posts</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #005cc5;">GET</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">undefined</span><span class="token">,</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token">queryParams</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">custom</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">token</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">jiOILkjsOI987</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-336"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-334">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-335'
	>
	Request URL in this case would look like this: <code>/api/v1/posts?token=jiOILkjsOI987</code>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-339"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-337">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-338'
	>
	Filters</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-342"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-340">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-341'
	>
	We have seen how we can filter data coming from the server, all we need to do is declare a <code>filter</code> object inside our RequestOptions &gt; queryParams object.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-345"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-343">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-344'
	>
	Every key-value pair inside filters will be parsed into a query string before making a request.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-348"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-346">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-347'
	>
	So to recap, our request with filter would like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-350"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #24292e;">store</span><span class="token">.</span><span class="token" style="color: #6f42c1;">request</span><span class="token">(</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">posts</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #005cc5;">GET</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">undefined</span><span class="token">,</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token">queryParams</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">filter</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">   </span><span class="token">status</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">reported</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;
</span></span><span class="line"><span class="token">  </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-353"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-351">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-352'
	>
	Request URL would look like this: <code>../api/v1/posts?filter[status]=reported</code>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-356"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-354">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-355'
	>
	Compound documents</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-359"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-357">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-358'
	>
	Sometimes, our models can contain resources that can be included along with regular resources to reduce the number of HTTP requests. Such resources are called “compound documents”.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-362"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-360">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-361'
	>
	When receiving compound documents, all resource objects (models) will be placed inside top level “included” array.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-365"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-363">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-364'
	>
	In datx model, we define “compound document” (another model) just like we would define a regular relationship.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-367"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token">@</span><span class="token" style="color: #6f42c1;">Attribute</span><span class="token">(</span><span class="token">{</span><span class="token"> </span><span class="token">toMany</span><span class="token">:</span><span class="token"> </span><span class="token" style="color: #24292e;">Comment</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #24292e;">public</span><span class="token"> </span><span class="token" style="color: #24292e;">comments</span><span class="token" style="color: #d73a49;">!</span><span class="token">: </span><span class="token" style="color: #24292e;">Comment</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-370"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-368">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-369'
	>
	After that, we would add ‘include’ property to our RequestOptions object:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-372"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-typescript github-light" data-language="typescript" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #24292e;">store</span><span class="token">.</span><span class="token" style="color: #6f42c1;">request</span><span class="token">(</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">posts</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #005cc5;">GET</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">undefined</span><span class="token">,</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token">queryParams</span><span class="token">:</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">  </span><span class="token">include</span><span class="token">:</span><span class="token"> </span><span class="token">[</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token" style="color: #24292e;">comment</span><span class="token" style="color: #d73a49;">&amp;</span><span class="token">#</span><span class="token" style="color: #005cc5;">8217</span><span class="token">;</span><span class="token">]</span><span class="token">
</span></span><span class="line"><span class="token"> </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">)</span><span class="token">;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-375"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-373">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-374'
	>
	When the request is successfully resolved, we should receive an array of comment models inside the ‘included’ array.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-378"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-376">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-377'
	>
	That&#8217;s all folks (for now)</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-381"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-379">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-380'
	>
	You’ve seen a basic usage of datx with JSON API specification.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-384"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-382">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-383'
	>
	We <a href="https://github.com/infinum/datx/issues/232">actively work</a> on improving datx library and adding more flexible features and mixins.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-387"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-385">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-386'
	>
	Some of the latest updates included usage without mobx as a dependency, increased library coverage (<a href="https://datx.dev/docs/jsonapi-angular/mixin">@datx/angular</a>, @datx/react…), and the possibility to make requests no matter what API specification you’re using (even with JSON API) with <a href="https://datx.dev/docs/mixins/network-mixin">@datx/network</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-390"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-388">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-389'
	>
	Feel free to contribute on <a href="https://github.com/infinum/datx">github</a> to make it even more hassle-free!</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/working-with-json-api/">Working with JSON API, Hassle-Free</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>