2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
est une solution permettant de réduire la complexité de l'interface utilisateur et de l'association des données.
Au début, lorsque le front-end et le back-end n'étaient pas séparés, le serveur répondait avec un code HTML complet, comprenant toutes les données nécessaires à la page.Le navigateur est uniquement responsable du rendu de la page, et le processus global estRendu côté serveur。
Le flux de traitement côté serveur : traite la demande, intègre les données requises dans HTML, puis les renvoie au navigateur.
Afin de réduire la complexité de ce processus, il existe MVC modèle.
Une partie des raisons de la séparation du front-end et du back-end,
Dans le modèle MVC, le modèle de données est assemblé dans la couche View pour générer le HTML final, qui devient de plus en plus complexe.
Je souhaite donc renvoyer directement les données au front-end et laisser la logique d'assemblage des données à afficher au front-end.
cadre frontal Vue、Réagir résoluDonnées --> Vueproblème, mais le contrôleur est beaucoup plus compliqué que le serveur.
1. Le contrôleur frontal traite en fait les opérations des utilisateurs, et les scénarios d'opération sont complexes et il existe trop de situations dans lesquelles les données sont modifiées.
1. Différents composants ont des opérations et des réponses différentes, et chaque gestionnaire d'événements fait quelque chose de différent.
2. Par exemple, le serveur a uniquement besoin de savoir si une certaine interface est appelée et le contrôleur gère la logique.
Il peut y avoir plusieurs scénarios dans lesquels le frontal déclenche l'interface appelante : déclenchement en cliquant sur un bouton, déclenchement par une minuterie ou déclenchement après l'exécution d'une autre logique.
2. Le cadre frontal utilise un flux de données unidirectionnel lors du partage de données, les données ne peuvent être promues qu'au composant de niveau supérieur et transmises couche par couche, ce qui est relativement fastidieux.
Donc le contexte (React.createContext
/ prvide/inject
) pour fournir des données partagées. Mais il existe encore quelques lacunes, notamment pour les applications de moyenne et grande taille.
La plus grande signification historique de la solution de données proposée par FaceBook est l'introduction de action
concept.
action
est un objet utilisé pour décrire ce qui doit être fait,est la seule raison qui déclenche des modifications de données。store
Représente un entrepôt de données (mode singleton global) pour stocker les données partagées.cela dépendra de différentsaction
Modifiez les données dans l'entrepôt.// 示例
cosnt loginAction = {
type: "login",
payload: {
loginId:"admin",
loginPwd:"123123"
}
}
const deleteAction = {
type: "delete",
payload: 1 // 用户id为1
}
exister Fléchir introduit sur la base dereducer
, utilisé selon action
Pour traiter les données, les données traitées seront réenregistrées par l'entrepôt.
En comparant le processus MVC côté serveur,
action
Equivaut à déclencher une requête,reducer
Équivalent au contrôleur.
Comparaison avec vuex :
Redux | Vuex |
---|---|
Magasin | Magasin |
Réducteur | Mutation |
Action | Action |
Simple à utiliser :
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());
Par rapport 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
})
au-dessus de.