2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
ist eine Lösung zur Reduzierung der Komplexität der Benutzeroberfläche und der Datenzuordnung.
In den frühen Tagen, als Front-End und Back-End nicht getrennt waren, antwortete der Server mit einem vollständigen HTML-Code, einschließlich aller für die Seite erforderlichen Daten.Der Browser spielt nur die Rolle des Renderns der Seite, und der Gesamtprozess ist esServerseitiges Rendering。
Der serverseitige Verarbeitungsablauf: Verarbeitet die Anfrage, bettet die erforderlichen Daten in HTML ein und gibt sie dann an den Browser zurück.
Um die Komplexität dieses Prozesses zu reduzieren, gibt es MVC Modell.
Einer der Gründe für die Trennung von Front- und Back-End,
Im MVC-Muster wird das Datenmodell in der Ansichtsebene zusammengestellt, um den endgültigen HTML-Code zu generieren, der immer komplexer wird.
Daher möchte ich Daten direkt an das Frontend zurückgeben und die Logik des Zusammenstellens der Daten für die Anzeige dem Frontend überlassen.
Frontend-Framework Ausblick、Reagieren gelöstDaten -> AnsichtProblem, aber der Controller ist viel komplizierter als der Server.
1. Der Front-End-Controller verarbeitet tatsächlich Benutzervorgänge. Die Betriebsszenarien sind komplex und es gibt zu viele Situationen, in denen Daten geändert werden.
1. Unterschiedliche Komponenten haben unterschiedliche Operationen und Reaktionen, und jeder Ereignishandler macht etwas anderes.
2. Der Server muss beispielsweise nur wissen, ob eine bestimmte Schnittstelle aufgerufen wird, und der Controller übernimmt die Logik.
Es kann mehr als ein Szenario geben, in dem das Front-End die aufrufende Schnittstelle auslöst: Auslösen durch Klicken auf eine Schaltfläche, Auslösen durch einen Timer oder Auslösen, nachdem eine andere Logik ausgeführt wurde.
2. Das Front-End-Framework verwendet einen unidirektionalen Datenfluss. Beim Teilen von Daten können die Daten nur zur Komponente der obersten Ebene hochgestuft und Schicht für Schicht weitergegeben werden, was relativ umständlich ist.
Der Kontext (React.createContext
/ prvide/inject
), um gemeinsame Daten bereitzustellen. Dennoch gibt es insbesondere bei mittleren und großen Anwendungen noch einige Defizite.
Die größte historische Bedeutung der von FaceBook vorgeschlagenen Datenlösung ist die Einführung von action
Konzept.
action
ist ein Objekt, mit dem beschrieben wird, was getan werden soll,ist der einzige Grund, der Datenänderungen auslöst。store
Stellt ein Data Warehouse (globaler Singleton-Modus) zum Speichern gemeinsam genutzter Daten dar.wird von verschiedenen abhängenaction
Ändern Sie die Daten im Lager.// 示例
cosnt loginAction = {
type: "login",
payload: {
loginId:"admin",
loginPwd:"123123"
}
}
const deleteAction = {
type: "delete",
payload: 1 // 用户id为1
}
existieren Biegen eingeführt basierend aufreducer
, verwendet nach action
Zur Verarbeitung der Daten werden die verarbeiteten Daten vom Lager erneut gespeichert.
Vergleich des MVC-Prozesses auf der Serverseite,
action
Entspricht dem Auslösen einer Anfrage,reducer
Entspricht Controller.
Vergleich mit vuex:
Redux | Vuex |
---|---|
Speichern | Speichern |
Reduzierstück | Mutation |
Aktion | Aktion |
Einfach zu benutzen:
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());
Verglichen Vuex:
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
})
über.