この記事では、約束と非同期/待ち声を持つアクションを使用して、Vuexで非同期操作を処理することを示しています。非同期ロジック(アクション)を状態の更新(突然変異)から分離し、荷重状態を組み込む、堅牢なエラー処理を強調することを強調しています
非同期操作は最新のアプリケーションで一般的であり、Vuexはそれらを優雅に管理するメカニズムを提供します。コアコンセプトは、状態に突然変異をコミットできる機能であるアクションの使用を中心に展開しますが、重要なことには、変異のように状態の変化に直接結合していません。これにより、状態を更新する前に、API呼び出しなどの非同期タスクを実行できます。アクションはコンポーネントから派遣され、より良い非同期コード管理のために約束または非同期/待望構文を利用できます。重要なのは、非同期ロジック(アクション)を州の更新(突然変異)から分離することです。
はい、非同期操作を処理するためにVuexアクション内で約束とAsync/待ち望を絶対に使用できます。約束は非同期操作を処理するための構造化された方法を提供しますが、Async/awaitは、読みやすさを向上させるより同期のようなコーディングスタイルを提供します。
約束の使用:
<code class="javascript">// Action const actions = { fetchData ({ commit }) { return new Promise((resolve, reject) => { fetch('/api/data') .then(response => response.json()) .then(data => { commit('SET_DATA', data); resolve(data); // Resolve the promise }) .catch(error => { reject(error); // Reject the promise }); }); } }; // Mutation const mutations = { SET_DATA (state, data) { state.data = data; } };</code>
async/awaitを使用する:
<code class="javascript">// Action const actions = { async fetchData ({ commit }) { try { const response = await fetch('/api/data'); const data = await response.json(); commit('SET_DATA', data); return data; // Return the data } catch (error) { // Handle error (see next section) throw error; // Re-throw the error for handling in the component } } }; // Mutation (same as above) const mutations = { SET_DATA (state, data) { state.data = data; } };</code>
どちらの例でも、アクションは、データが正常にフェッチされた後、状態を更新するために突然変異を派遣します。重要な違いは、非同期操作の処理方法です。 PROMISSは.then()
および.catch()
try...catch
使用します。 Async/awaitは、一般に、非同期操作のためのよりクリーンで読みやすいコードにつながります。
いくつかのベストプラクティスが、Vuexストア内での非同期データフェッチと更新の効率的に管理することに貢献しています。
context
オブジェクトを使用します:アクションに渡されたcontext
オブジェクトを利用して、ストア内の柔軟な相互作用のためにcommit
、 dispatch
、 state
、およびrootState
アクセスします。堅牢なアプリケーションを構築するには、効果的なエラー処理が重要です。 Vuexアクション内でエラーを処理するための戦略は次のとおりです。
try...catch
Blockは、ASYNC/待ち行列内のエラーを処理する最も簡単な方法です。 catch
ブロックは、非同期操作中にスローされたエラーを傍受します。.catch()
メソッドを使用してエラーを処理します。async/awaitとのエラー処理の組み込みの例:
<code class="javascript">const actions = { async fetchData ({ commit }, payload) { try { const response = await fetch(`/api/data/${payload.id}`); if (!response.ok) { const errorData = await response.json(); // Try to parse error response const errorMessage = errorData.message || 'Failed to fetch data'; throw new Error(errorMessage); // Throw a custom error } const data = await response.json(); commit('SET_DATA', data); return data; } catch (error) { commit('SET_ERROR', error); // Update error state throw error; // Re-throw for handling in component } } }; const mutations = { SET_ERROR (state, error) { state.error = error; } };</code>
この例は、ネットワークエラーとカスタムエラーオブジェクトを処理する方法を示しており、VUEXストア内でより堅牢なエラー処理メカニズムを提供します。ストアのエラー状態に基づいて、コンポーネントに常にユーザーフレンドリーなエラーメッセージを表示することを忘れないでください。
以上がVuexで非同期アクションを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。