Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
es una solución para reducir la complejidad de la interfaz de usuario y la asociación de datos.
En los primeros días, cuando el front-end y el back-end no estaban separados, el servidor respondía con un HTML completo, incluyendo todos los datos necesarios para la página.El navegador solo desempeña la función de representar la página y el proceso general esRepresentación del lado del servidor。
El flujo de procesamiento del lado del servidor: procesa la solicitud, incrusta los datos requeridos en HTML y luego los devuelve al navegador.
Para reducir la complejidad de este proceso, existe MVC modelo.
Parte de las razones de la separación del front-end y el back-end.,
En el patrón MVC, el modelo de datos se ensambla en la capa de Vista para generar el HTML final, que se vuelve cada vez más complejo.
Por lo tanto, quiero devolver los datos directamente al front-end y dejar la lógica de ensamblar los datos para mostrarlos al front-end.
marco frontal Vista、Reaccionar resueltoDatos --> Verproblema, pero el controlador es mucho más complicado que el servidor.
1. El controlador de front-end en realidad está procesando las operaciones del usuario, los escenarios de operación son complejos y hay demasiadas situaciones en las que se cambian los datos.
1. Diferentes componentes tienen diferentes operaciones y respuestas, y cada controlador de eventos hace algo diferente.
2. Por ejemplo, el servidor solo necesita saber si se llama a una determinada interfaz y el controlador maneja la lógica.
Puede haber más de un escenario en el que el front-end active la interfaz de llamada: activación al hacer clic en un botón, activación mediante un temporizador o activación después de ejecutar otra lógica.
2. El marco de front-end utiliza un flujo de datos unidireccional. Al compartir datos, los datos solo se pueden promover al componente de nivel superior y pasar capa por capa, lo cual es relativamente engorroso.
Entonces el contexto (React.createContext
/ prvide/inject
) para proporcionar datos compartidos. Pero todavía existen algunas deficiencias, especialmente para aplicaciones medianas y grandes.
La mayor importancia histórica de la solución de datos propuesta por FaceBook es la introducción de action
concepto.
action
es un objeto utilizado para describir lo que se debe hacer,es la única razón que desencadena cambios de datos。store
Representa un almacén de datos (modo singleton global) para almacenar datos compartidos.dependerá de diferentesaction
Cambiar los datos en el almacén.// 示例
cosnt loginAction = {
type: "login",
payload: {
loginId:"admin",
loginPwd:"123123"
}
}
const deleteAction = {
type: "delete",
payload: 1 // 用户id为1
}
existir Doblar introducido basado enreducer
, utilizado según action
Para procesar los datos, el almacén volverá a guardar los datos procesados.
Comparando el proceso MVC en el lado del servidor,
action
Equivalente a activar una solicitud,reducer
Equivalente a Controlador.
Comparación con vuex:
Redux | Vuex |
---|---|
Almacenar | Almacenar |
Reductor | Mutación |
Acción | Acción |
Fácil 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
})
arriba.