τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
είναι μια λύση για τη μείωση της πολυπλοκότητας της διεπαφής χρήστη και του συσχετισμού δεδομένων.
Στις πρώτες μέρες, όταν το front-end και το back-end δεν διαχωρίζονταν, ο διακομιστής απαντούσε με ένα πλήρες HTML, συμπεριλαμβανομένων όλων των δεδομένων που απαιτούνται για τη σελίδα.Το πρόγραμμα περιήγησης είναι υπεύθυνο μόνο για την απόδοση της σελίδας και η συνολική διαδικασία είναιΑπόδοση από την πλευρά του διακομιστή。
Η ροή επεξεργασίας από την πλευρά του διακομιστή: επεξεργάζεται το αίτημα, ενσωματώνει τα απαιτούμενα δεδομένα σε HTML και στη συνέχεια τα επιστρέφει στο πρόγραμμα περιήγησης.
Προκειμένου να μειωθεί η πολυπλοκότητα αυτής της διαδικασίας, υπάρχει MVC μοντέλο.
Μέρος των λόγων για το διαχωρισμό των μπροστινών και πίσω άκρων,
Στο μοτίβο MVC, το μοντέλο δεδομένων συναρμολογείται στο επίπεδο View για να δημιουργήσει το τελικό HTML, το οποίο γίνεται όλο και πιο περίπλοκο.
Θέλω λοιπόν να επιστρέψω απευθείας δεδομένα στο μπροστινό μέρος και να αφήσω τη λογική της συναρμολόγησης των δεδομένων για εμφάνιση στο μπροστινό μέρος.
πλαίσιο front-end Vue、Αντιδρώ λυθείΔεδομένα --> Προβολήπρόβλημα, αλλά ο ελεγκτής είναι πολύ πιο περίπλοκος από τον διακομιστή.
1. Ο ελεγκτής front-end επεξεργάζεται στην πραγματικότητα τις λειτουργίες του χρήστη και τα σενάρια λειτουργίας είναι πολύπλοκα και υπάρχουν πάρα πολλές περιπτώσεις όπου αλλάζουν δεδομένα.
1. Διαφορετικά στοιχεία έχουν διαφορετικές λειτουργίες και αποκρίσεις και κάθε πρόγραμμα χειρισμού συμβάντων κάνει κάτι διαφορετικό.
2. Για παράδειγμα, ο διακομιστής χρειάζεται μόνο να γνωρίζει εάν καλείται μια συγκεκριμένη διεπαφή και ο ελεγκτής χειρίζεται τη λογική.
Μπορεί να υπάρχουν περισσότερα από ένα σενάρια στα οποία το μπροστινό μέρος ενεργοποιεί τη διεπαφή κλήσης: ενεργοποίηση κάνοντας κλικ σε ένα κουμπί, ενεργοποίηση με χρονόμετρο ή ενεργοποίηση μετά την εκτέλεση άλλης λογικής.
2. Το πλαίσιο διεπαφής χρησιμοποιεί μια μονόδρομη ροή δεδομένων Κατά την κοινή χρήση δεδομένων, τα δεδομένα μπορούν να προωθηθούν μόνο στο στοιχείο ανώτατου επιπέδου και να περάσουν επίπεδο προς επίπεδο, κάτι που είναι σχετικά δυσκίνητο.
Έτσι το πλαίσιο (React.createContext
/ prvide/inject
) για την παροχή κοινών δεδομένων. Όμως εξακολουθούν να υπάρχουν κάποιες ελλείψεις, ειδικά για μεσαίες και μεγάλες εφαρμογές.
Η μεγαλύτερη ιστορική σημασία της λύσης δεδομένων που προτείνεται από το FaceBook είναι η εισαγωγή του action
έννοια.
action
είναι ένα αντικείμενο που χρησιμοποιείται για να περιγράψει τι πρέπει να γίνει,είναι ο μόνος λόγος που προκαλεί αλλαγές δεδομένων。store
Αντιπροσωπεύει μια αποθήκη δεδομένων (global singleton mode) για την αποθήκευση κοινόχρηστων δεδομένων.θα εξαρτηθεί από διαφορετικάaction
Αλλάξτε τα δεδομένα στην αποθήκη.// 示例
cosnt loginAction = {
type: "login",
payload: {
loginId:"admin",
loginPwd:"123123"
}
}
const deleteAction = {
type: "delete",
payload: 1 // 用户id为1
}
υπάρχει Καλώδιο εισήχθη με βάσηreducer
, χρησιμοποιείται σύμφωνα με action
Για την επεξεργασία των δεδομένων, τα επεξεργασμένα δεδομένα θα αποθηκευτούν εκ νέου από την αποθήκη.
Συγκρίνοντας τη διαδικασία MVC από την πλευρά του διακομιστή,
action
Ισοδυναμεί με την ενεργοποίηση ενός αιτήματος,reducer
Αντίστοιχο με τον Ελεγκτή.
Σύγκριση με vuex:
Redux | 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());
Σε συγκριση 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
})
πάνω από.