2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
on ratkaisu käyttöliittymän ja tietojen yhdistämisen monimutkaisuuden vähentämiseen.
Alkuaikoina, jolloin käyttöliittymää ja taustaosaa ei erotettu, palvelin vastasi täydellisellä HTML-koodilla, joka sisälsi kaikki sivulle tarvittavat tiedot.Selain toimii vain sivun hahmontajana, ja koko prosessi onPalvelinpuolen renderöinti。
Palvelinpuolen käsittelykulku: käsittelee pyynnön, upottaa tarvittavat tiedot HTML:ään ja palauttaa sen sitten selaimeen.
Tämän prosessin monimutkaisuuden vähentämiseksi on olemassa MVC malli.
Osa syistä etu- ja takapäiden erottamiseen,
MVC-mallissa tietomalli kootaan View-kerrokseen lopullisen HTML:n luomiseksi, josta tulee yhä monimutkaisempi.
Haluan siis palauttaa tiedot suoraan käyttöliittymään ja jättää datan kokoamisen logiikan näyttöä varten käyttöliittymään.
käyttöliittymäkehys Vue、Reagoi ratkaistuTiedot --> Näytäongelma, mutta ohjain on paljon monimutkaisempi kuin palvelin.
1. Käyttöliittymän ohjain itse asiassa käsittelee käyttäjien toimintoja, ja toimintaskenaariot ovat monimutkaisia, ja tilanteita, joissa tietoja muutetaan, on liian monta.
1. Eri komponenteilla on erilaiset toiminnot ja vastaukset, ja jokainen tapahtumakäsittelijä tekee jotain erilaista.
2. Esimerkiksi palvelimen tarvitsee vain tietää, onko tietty rajapinta kutsuttu, ja ohjain hoitaa logiikan.
Saattaa olla useampi kuin yksi skenaario, jossa käyttöliittymä laukaisee kutsuvan käyttöliittymän: laukaisee napsauttamalla painiketta, laukaisee ajastimella tai laukaisee sen jälkeen, kun jokin muu logiikka on suoritettu.
2. Käyttöliittymä käyttää yksisuuntaista tietovirtaa Dataa jaettaessa tiedot voidaan siirtää vain ylimmän tason komponenttiin ja välittää kerros kerrokselta, mikä on suhteellisen hankalaa.
Joten konteksti (React.createContext
/ prvide/inject
) tarjotakseen jaettuja tietoja. Mutta on edelleen joitain puutteita, erityisesti keskisuurissa ja suurissa sovelluksissa.
FaceBookin ehdottaman dataratkaisun suurin historiallinen merkitys on esittely action
konsepti.
action
on esine, jota käytetään kuvaamaan mitä on tehtävä,on ainoa syy, joka laukaisee datamuutoksia。store
Edustaa tietovarastoa (global singleton mode) jaettujen tietojen tallentamiseen.riippuu eriaction
Muuta tietoja varastossa.// 示例
cosnt loginAction = {
type: "login",
payload: {
loginId:"admin",
loginPwd:"123123"
}
}
const deleteAction = {
type: "delete",
payload: 1 // 用户id为1
}
olla olemassa Flex käyttöön perustuenreducer
, käytetty mukaan action
Tietojen käsittelyä varten varasto tallentaa käsitellyt tiedot uudelleen.
Vertaamalla MVC-prosessia palvelinpuolella,
action
Vastaa pyynnön käynnistämistä,reducer
Vastaa Controlleria.
Vertailu vuexiin:
Redux | Vuex |
---|---|
Store | Store |
Vähentäjä | Mutaatio |
Toiminta | Toiminta |
Yksinkertainen käyttää:
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());
Verrattuna 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
})
edellä.