minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
é uma solução para reduzir a complexidade da interface do usuário e da associação de dados.
Antigamente, quando o front-end e o back-end não eram separados, o servidor respondia com um HTML completo, incluindo todos os dados necessários para a página.O navegador é responsável apenas por renderizar a página, e o processo geral éRenderização do lado do servidor。
O fluxo de processamento do lado do servidor: processa a solicitação, incorpora os dados necessários em HTML e os retorna ao navegador.
Para reduzir a complexidade deste processo, há MVC modelo.
Parte das razões para a separação entre front e back-ends,
No padrão MVC, o modelo de dados é montado na camada View para gerar o HTML final, que está se tornando cada vez mais complexo.
Portanto, quero retornar os dados diretamente para o front-end e deixar a lógica de montagem dos dados para exibição para o front-end.
estrutura de front-end Vista、Reagir resolvidoDados --> Visualizarproblema, mas o Controlador é muito mais complicado que o servidor.
1. O controlador front-end está realmente processando as operações do usuário, os cenários de operação são complexos e há muitas situações em que os dados são alterados.
1. Componentes diferentes têm operações e respostas diferentes, e cada manipulador de eventos faz algo diferente.
2. Por exemplo, o servidor só precisa saber se uma determinada interface é chamada e o controlador cuida da lógica.
Pode haver mais de um cenário em que o front-end aciona a interface de chamada: acionamento clicando em um botão, acionamento por um temporizador ou acionamento após outra lógica ser executada.
2. A estrutura front-end usa um fluxo de dados unidirecional. Ao compartilhar dados, os dados só podem ser promovidos para o componente de nível superior e passados camada por camada, o que é relativamente complicado.
Então o contexto (React.createContext
/ prvide/inject
) para fornecer dados compartilhados. Mas ainda existem algumas deficiências, especialmente para aplicações de médio e grande porte.
O maior significado histórico da solução de dados proposta pelo Facebook é a introdução de action
conceito.
action
é um objeto usado para descrever o que deve ser feito,é o único motivo que desencadeia alterações de dados。store
Representa um data warehouse (modo singleton global) para armazenar dados compartilhados.dependerá de diferentesaction
Altere os dados no armazém.// 示例
cosnt loginAction = {
type: "login",
payload: {
loginId:"admin",
loginPwd:"123123"
}
}
const deleteAction = {
type: "delete",
payload: 1 // 用户id为1
}
existir Flex introduzido com base emreducer
, usado de acordo com action
Para processar os dados, os dados processados serão salvos novamente pelo warehouse.
Comparando o processo MVC no lado do servidor,
action
Equivalente a acionar uma solicitação,reducer
Equivalente ao Controlador.
Comparação com vuex:
Restaurado | Vuex |
---|---|
Loja | Loja |
Redutor | Mutação |
Ação | Ação |
Simples de usar:
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());
Comparado 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
})
acima.