[技術]応答状態管理(Redux、React Query、SWR)
10469 ワード
Intro
反応器の状態は次のように分けられます.
1 REDUX
Reduxは、Context APIが現在の形で使用を改善する前に、UserReducerというHookが存在する前に作成されたライブラリです.
実際、Context APIが改善される前に、プロジェクトでのグローバル状態管理は非常に困難であった.従来のプログラミング方法では、冗長状態などのステータス管理ライブラリにグローバルステータスとサーバステータスを含めることが主です.
npmtrendsは,現在反応を用いている項目の45%が反応器を用いていることを示した.
アシストデバイスでは、同期ロジックは動作およびアシストデバイスを直感的に作成できますが、非同期ロジックを処理する場合は、ミドルウェアを使用する必要があります.冗長ミドルウェアは、発生した動作をブロックして他の論理を実行することを可能にし、非同期論理を処理するミドルウェアにはredux-thunkとredux-sagaがある.
// react-saga
function* getSomethingSaga() {
try {
const res = yield call(fetchSomething);
yield put({
type: "successAction",
payload: res.data,
});
} catch {
yield put({
type: "failAction",
payload: res.data,
});
}
}
function* someSaga() {
yield takeEvery("someAction", getSomethingSaga);
}
function* rootSaga() {
yield all[someSaga()];
}
store.dispatch({ type: "someAction" });
しかし,これにより,1つの店舗でグローバル状態とサーバ状態を管理するため,店舗はますます肥大化し,興味点を分離することが困難になる.2 Fetch library
SWR、react-queryなどのデータ取得ライブラリを使用すると、ステータス管理ライブラリから非同期ロジックを削除し、Global State(Global State、Server State)を分離して宣言プログラミングできます.
// SWR
import useSWR from "swr";
function Profile() {
const { data, error } = useSWR("/api/user", fetcher, options);
if (error) return <div>failed to load</div>;
if (!data) return <div>loading...</div>;
return <div>hello {data.name}!</div>;
}
サーバのステータスを変更してグローバル・ステータスを更新する必要がある場合は、サーバのステータスを再構築する必要はありません.鍵とデータをmutate関数に渡すだけで、再構築せずに更新できます.const Profile = () => {
const { mutate } = useSWRConfig();
const [profile, setProfile] = useState({ name: "jojiiiiyoung" });
const handleEditProfile = () => {
await updateProfile(profile);
// mutate 함수에 data 인자를 전달하면 refetch 없이 즉시 변경
mutate(`/user/${userId}`, profile, false);
};
};
これにより、データ・キャプチャ・ライブラリでは、次のような問題が解決されます.1年以内に受け取ったダウンスターの数によって人気指数を決めるrisingstarsの場合、ReactQueryは9位、SWRは14位となり、現在でも両庫の人気が順風満帆であることが確認されています.
Reference
Reference
この問題について([技術]応答状態管理(Redux、React Query、SWR)), 我々は、より多くの情報をここで見つけました https://velog.io/@choikwangil/React에서-서버-데이터를-최신으로-관리하기React-Query-SWRテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol