私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
は、UI とデータの関連付けの複雑さを軽減するためのソリューションです。
フロントエンドとバックエンドが分離されていなかった初期の頃、サーバーはページに必要なすべてのデータを含む完全な HTML で応答していました。ブラウザはページをレンダリングする役割のみを果たし、プロセス全体は次のようになります。サーバーサイドレンダリング。
サーバー側の処理フロー: リクエストを処理し、必要なデータを HTML に埋め込んで、ブラウザーに返します。
このプロセスの複雑さを軽減するには、次のようにします。 MVCC の モデル。
フロントエンドとバックエンドの分離の理由の一部,
MVC パターンでは、データ モデルがビュー層に組み込まれて最終的な HTML が生成されますが、HTML はますます複雑になっています。
したがって、データを直接フロントエンドに返し、表示用のデータを組み立てるロジックはフロントエンドに任せたいと考えています。
フロントエンドフレームワーク ビュー、反応する 解決しましたデータ --> 表示問題はありますが、コントローラーはサーバーよりもはるかに複雑です。
1. 実際にユーザーの操作を処理するのはフロントエンドのControllerであり、操作シナリオが複雑でデータが変更される場面が多すぎる。
1. コンポーネントが異なれば操作や応答も異なり、各イベント ハンドラーは異なる動作を行います。
2. たとえば、サーバーは特定のインターフェイスが呼び出されているかどうかのみを知る必要があり、コントローラーがロジックを処理します。
フロントエンドが呼び出し側インターフェイスをトリガーするシナリオは複数ある場合があります。ボタンのクリックによるトリガー、タイマーによるトリガー、または他のロジックの実行後のトリガーなどです。
2. フロントエンド フレームワークは一方向のデータ フローを使用します。データを共有する場合、データは最上位コンポーネントにプロモートされ、レイヤーごとに渡されるだけですが、これは比較的面倒です。
したがって、コンテキスト (React.createContext
/ prvide/inject
) 共有データを提供します。しかし、特に中規模および大規模なアプリケーションでは、まだいくつかの欠点があります。
FaceBook が提案するデータ ソリューションの歴史的最大の意義は、 action
コンセプト。
action
何を行うかを記述するために使用されるオブジェクトです。データ変更をトリガーする唯一の理由です。store
共有データを保存するデータ ウェアハウス (グローバル シングルトン モード) を表します。異なるものに依存しますaction
ウェアハウス内のデータを変更します。// 示例
cosnt loginAction = {
type: "login",
payload: {
loginId:"admin",
loginPwd:"123123"
}
}
const deleteAction = {
type: "delete",
payload: 1 // 用户id为1
}
存在する フレックス に基づいて紹介されましたreducer
に従って使用されます action
データを処理するために、処理されたデータはウェアハウスによって再保存されます。
サーバー側のMVCプロセスを比較すると、
action
リクエストをトリガーするのと同等、reducer
コントローラーに相当します。
vuexとの比較:
戻ってきた | ヴュークス |
---|---|
店 | 店 |
リデューサー | 突然変異 |
アクション | アクション |
使い方は簡単:
import { createStore } from "redux";
function reducer(state, action) {
console.log(action.payload);
if (action.type === "add") {
return state + 1;
} else if (action.type === "minus") {
return state - 1;
}
return state;
}
const store = createStore(reducer, 10);
// 分发 action
store.dispatch({ type: "add", payload: "附加的数据" });
// 获取最新的 store
console.log(store.getState());
比較した ヴュークス:
const store = createStore({
state: {
count: 0
},
mutations: {
increment (state, { amount }) {
state.count += amount
}
},
actions: {
increment ({ commit }, payload) {
// 触发 mutation
commit('increment', payload)
}
}
})
// 分发 action
store.dispatch('increment', {
amount: 10
})
// 以对象形式分发
store.dispatch({
type: 'increment',
amount: 10
})
その上。