Recol -状態を管理する非同期の方法[パート1 ]
25722 ワード
以前はいくつかの反跳用語の概観とどのように使用して状態を管理する.
ここでは反跳の非同期側を探索する.
反跳非同期状態管理サポート 反応する 反応なしで 取得し、APIからデータを表示するアプリを作成してみましょう
まず、新しいものを作る
1 .はじめに
使用 私たちは 私たちは価値を
2 .コンポーネントを作成する
ここでは しかし、我々はまた、使用することができます 3 .追加しましょう
我々はラップ エラー処理コンポーネントを作成するには、Error Boundaries .
4 .別のコンポーネントを作成し追加する
使用する
さらに
A .
b .
c.
に応じて 時 これは、データを非同期的に反跳APIを使用して取得する小さなフェッチデータアプリケーションを完了します.あなたがより構造化されたアプローチを見たいならば、以下のチェックアウトGitHubリポジトリ.
次に探ります
最後に感謝したいReqres テストするAPIを与えるために.
ここでは反跳の非同期側を探索する.
反跳非同期状態管理サポート
<Suspense/>
. フォールバックUIは、保留中の要求が完了するまでレンダリングされます.<Suspense/>
, CORMIILフックからのデータのステータスは、まだ読み込みまたは完了またはエラーをキャッチしているかどうかをチェックするために使用することができます.まず、新しいものを作る
create-react-app
そして、新しいプロジェクトとラップのためにそれをきれいにしてください<RecoilRoot/>
ルート周辺.1 .はじめに
Selector
これはデータを取得します.import React from 'react';
import { selector } from 'recoil';
const url = `https://reqres.in/api/users?page=1`;
const fetchUserDetails = selector({
key: 'userDetailsSelector',
get: async ({ get }) => {
try{
const response = await fetch(url);
const data = await response.json();
return data;
}catch(error){
throw error;
}
}
});
function App() {
return (
<div>
<p> Recoil Example </p>
</div>
);
}
export default App;
selector
データを取得するfetch
. async
関数へget
取得したデータを返すパラメータです.atom
ユーザーID、ページ番号、認証キーのようなURLパラメータやボディデータを設定するには、この時点でスキップします.<DetailsWithSuspense/>
これはfetchUserDetails Selector
データをレンダリングする.import React from 'react';
import { selector, useRecoilValue } from 'recoil';
const url = `https://reqres.in/api/users?page=1`;
const fetchUserDetails = selector({
key: 'userDetailsSelector',
get: async ({ get }) => {
try{
const response = await fetch(url);
const data = await response.json();
return data;
}catch(error){
throw error;
}
}
});
const DetailsWithSuspense = () => {
const userDetails = useRecoilValue(fetchUserDetails);
const { data } = userDetails;
return (
data.map(item => (
<div key={item.id}>
<p>
{`Email: ${item.email} Name: ${item.first_name} ${item.last_name}`}.
</p>
</div>
))
);
}
function App() {
return (
<div>
<p> Recoil Example </p>
</div>
);
}
export default App;
useRecoilValue
フックの購読と値を取得するfetchUserDetails Selector
. useRecoilState
フック値と値を設定する関数を取得します.(ここでは、セレクタが返すデータとして値を設定することはできません)<Suspense/>
非同期データをレンダリングするにはimport React from 'react';
import { selector, useRecoilValue } from 'recoil';
const url = `https://reqres.in/api/users?page=1`;
const fetchUserDetails = selector({
key: 'userDetailsSelector',
get: async ({ get }) => {
try{
const response = await fetch(url);
const data = await response.json();
return data;
}catch(error){
throw error;
}
}
});
const DetailsWithSuspense = () => {
const userDetails = useRecoilValue(fetchUserDetails);
const { data } = userDetails;
return (
data.map(item => (
<div key={item.id}>
<p>
{`Email: ${item.email} Name: ${item.first_name} ${item.last_name}`}.
</p>
</div>
))
);
}
function App() {
return (
<div>
<React.Suspense fallback={<div>Loading...</div>}>
<DetailsWithSuspense />
</React.Suspense>
</div>
);
}
export default App;
<DetailsWithSuspense />
with <Suspense/>
これは保留中のデータの面倒を見るfallback
非同期呼び出しが完了したりエラーが発生するまでコンポーネントをレンダリングします.<サスペンス>があなたの方法でないならば、反則はまだあなたの背中を得ました!👇
4 .別のコンポーネントを作成し追加する
<DetailsWithoutSuspense />
これはfetchUserDetails Selector
データをレンダリングする.import React from 'react';
import { selector, useRecoilValue, useRecoilValueLoadable } from 'recoil';
const url = `https://reqres.in/api/users?page=1`;
const fetchUserDetails = selector({
key: 'userDetailsSelector',
get: async ({ get }) => {
try{
const response = await fetch(url);
const data = await response.json();
return data;
}catch(error){
throw error;
}
}
});
const DetailsWithoutSuspense = () => {
const userDetails = useRecoilValueLoadable(fetchUserDetails);
const { state } = userDetails;
if (userDetails.state === 'hasError') {
return <div> There is some problem! </div>
}
if(state === 'loading'){
return <div>Its loading</div>
}
if(state === 'hasValue'){
const { contents: { data }} = userDetails;
return (
data.map(item => (
<div key={item.id}>
<p>
{`Email: ${item.email} Name: ${item.first_name} ${item.last_name}`}.
</p>
</div>
))
);
}
}
const DetailsWithSuspense = () => {
const userDetails = useRecoilValue(fetchUserDetails);
const { data } = userDetails;
return (
data.map(item => (
<div key={item.id}>
<p>
{`Email: ${item.email} Name: ${item.first_name} ${item.last_name}`}.
</p>
</div>
))
);
}
function App() {
return (
<div>
<DetailsWithoutSuspense />
<React.Suspense fallback={<div>Loading...</div>}>
<DetailsWithSuspense />
</React.Suspense>
</div>
);
}
export default App;
useRecoilValueLoadable
予約するフックfetchUserDetails Selector
. さらに
useRecoilValueLoadable
オブジェクトを返すstate
key現在の状態を保持します.A .
hasError
: エラーが発生したときに設定するb .
loading
: データが保留中のときに設定するc.
hasValue
: データが正常に受信されたときに設定するstate
値に応じて、コンポーネントをレンダリングできます.state
値がhasValue
, the object returned by useRecoilValueLoadable
保留中のデータを保持するcontents
キー.シュブハクク / recoil asyncの例
反跳の非同期側を試みる
次に探ります
selectorFamily
これはselector
パラメータを受け入れます.最後に感謝したいReqres テストするAPIを与えるために.
Reference
この問題について(Recol -状態を管理する非同期の方法[パート1 ]), 我々は、より多くの情報をここで見つけました https://dev.to/shubhamk/recoil-the-asynchronous-way-to-manage-state-part-1-18kkテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol