내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
UI 및 데이터 연관의 복잡성을 줄이기 위한 솔루션입니다.
프런트엔드와 백엔드가 분리되지 않았던 초기에는 서버가 페이지에 필요한 모든 데이터를 포함하여 완전한 HTML로 응답했습니다.브라우저는 페이지 렌더링만 담당하며 전체 프로세스는 다음과 같습니다.서버 측 렌더링。
서버 측 처리 흐름: 요청을 처리하고 필요한 데이터를 HTML에 포함시킨 다음 이를 브라우저에 반환합니다.
이 과정의 복잡성을 줄이기 위해 다음과 같은 방법이 있습니다. 엠비씨 모델.
앞부분과 뒷부분이 분리되는 이유 중 일부,
MVC 패턴에서는 데이터 모델이 뷰 레이어로 조립되어 최종 HTML을 생성하는데, 이는 점점 더 복잡해지고 있습니다.
그래서 데이터를 프런트엔드에 직접 반환하고, 표시할 데이터를 조합하는 로직은 프런트엔드에 맡기고 싶습니다.
프론트엔드 프레임워크 뷰、반응하다 해결됨데이터 --> 보기문제가 있지만 컨트롤러는 서버보다 훨씬 더 복잡합니다.
1. 프런트 엔드 컨트롤러는 실제로 사용자 작업을 처리하고 있으며 작업 시나리오가 복잡하고 데이터가 변경되는 상황이 너무 많습니다.
1. 구성 요소마다 작업과 응답이 다르며 각 이벤트 핸들러는 서로 다른 작업을 수행합니다.
2. 예를 들어 서버는 특정 인터페이스가 호출되는지 여부만 알면 되고 컨트롤러는 로직을 처리합니다.
프런트 엔드가 호출 인터페이스를 트리거하는 시나리오는 두 개 이상일 수 있습니다. 즉, 버튼을 클릭하여 트리거하거나, 타이머로 트리거하거나, 다른 로직이 실행된 후 트리거할 수 있습니다.
2. 프런트엔드 프레임워크는 단방향 데이터 흐름을 사용합니다. 데이터를 공유할 때 데이터는 최상위 구성 요소로만 승격되고 레이어별로 전달될 수 있으며 이는 상대적으로 번거롭습니다.
따라서 컨텍스트(React.createContext
/ prvide/inject
) 공유 데이터를 제공합니다. 그러나 특히 중형 및 대규모 애플리케이션의 경우 여전히 몇 가지 단점이 있습니다.
FaceBook이 제안하는 데이터 솔루션의 가장 큰 역사적 의의는 action
개념.
action
수행할 작업을 설명하는 데 사용되는 개체입니다.데이터 변경을 트리거하는 유일한 이유입니다.。store
공유 데이터를 저장하는 데이터 웨어하우스(글로벌 싱글톤 모드)를 나타냅니다.따라 달라질 것이다action
창고의 데이터를 변경합니다.// 示例
cosnt loginAction = {
type: "login",
payload: {
loginId:"admin",
loginPwd:"123123"
}
}
const deleteAction = {
type: "delete",
payload: 1 // 用户id为1
}
존재하다 몸을 풀다 기반으로 소개된reducer
, 다음에 따라 사용됨 action
데이터 처리를 위해 처리된 데이터는 창고에 다시 저장됩니다.
서버 측의 MVC 프로세스를 비교하면,
action
요청을 트리거하는 것과 동일합니다.reducer
컨트롤러와 동일합니다.
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());
비교됨 뷰엑스:
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
})
위에.