이 글은 주로 ReactNative에서 사용되는 Redux 아키텍처에 대한 요약을 소개합니다. 편집자가 꽤 좋다고 생각해서 지금 공유하고 참고용으로 제공하겠습니다. .NET에 관심 있는 친구들은 에디터를 따라가서 살펴보세요
이 글은 ReactNative에서 사용되는 Redux 아키텍처를 요약해서 소개하고 모두와 공유합니다. 자세한 내용은 다음과 같습니다.
저는 한동안 Redux를 사용해왔습니다. 요약하자면.
Redux를 사용하는 이유는?
Background:
RN의 상태(변수, 하위 컴포넌트가 보이지 않음)와 props(불변, 하위 컴포넌트가 표시됨) 디자인으로 대규모 프로젝트를 쉽게 처리할 수 있습니다. 상태로 인해 상태 혼란이 발생하고 구성 요소 렌더링 오류
RN은 대상 바인딩이 필요하지 않은 가상 DOM을 사용합니다. -> 작업은 상태가 변경되는 한 새 상태의 구성 요소가 렌더링되고 데이터가 표시됩니다. 는 한 방향으로 전송되며 MVC 디자인 패턴은 양방향 데이터 흐름을 갖습니다.
RN은 테스트하기가 쉽지 않습니다. Redux는 매우 편리한 모의 테스트 방법을 제공합니다. Redux Development Environment redux : 'NPM 설치-'NPM 설치-Save Redux 'install React Native and Redux 바인딩 라이브러리 : NPM 설치-Save React-Redux install Redux Thunk 비동기 액션 미들웨어: npm install –save redux-thunk
세 가지 원칙
단일 데이터 소스상태는 읽기 전용입니다.
해당 작업이 상태를 수정하는 방법을 설명하는 리듀서를 작성하세요. 일반적으로 스위치(action.type)를 사용하면 부작용 없이 처리할 수 있습니다
Use
2.connect: 두 개의 매개 변수를 허용합니다. 하나는 mapStateToProps 또는 mapDispatchToProps이고 다른 하나는 구성 요소 자체입니다. 바인딩됩니다.
Store
Store는 Reducer와 Action을 연결하는 객체입니다. Store에는 다음과 같은 책임이 있습니다.
getState() 메소드를 제공합니다. 모든 현재 상태 얻기
는 상태를 업데이트하는 디스패치(작업) 메서드를 제공합니다. 이는 상태를 데이터베이스에 저장하고 상태를 변경하는 작업을 저장하는 것과 같습니다.
구독(리스너)을 통해 청취자를 등록하세요.
Store는 본질적으로 전체 애플리케이션의 상태를 트리 형태로 저장하는 객체입니다. 그리고 몇 가지 방법을 제공합니다. 예를 들어 getState() 및 dispatch()입니다.
import { createStore, applyMiddleware } from 'redux'; import thunk from 'redux-thunk';//异步 import reducers from './reducers'; const Store = applyMiddleware(thunk)(createStore)(reducers); export default Store;
리듀서의 본질은 함수, 즉 순수함수입니다. 부작용은 없습니다. 간단히 말해서 Reducer는 수신된 작업과 상태를 기반으로 Store의 상태를 수정하는 한 가지 작업만 담당합니다.
(state, action) => newState
는 일반적으로 switch(action)을 통해 구현됩니다. . 유형) 다른 작업을 결정하는 경우 기본값은 이전 상태입니다. 초기 상태도 정의할 수 있습니다.
코드:
import { combineReducers } from 'redux'; const newState = (state = {}, action = {}) => { switch (action.type) { case ActionTypes.CSTATE: return { ...state, ...action.state }; case '_DPDATACHANGE_': return {...state, ...action.dpState}; default: return state; } }; //Reducer 合并 export default combineReducers({ newState, });
참고: 반환되는 것은 이전 상태 값의 일부를 유지해야 하는 경우...state(ES7 객체 확장 구문, 해당 객체의 속성은 얕은 복사됩니다. 여기서는 Object.sign({}, state, newState))와 동일합니다. 상태를 병합하면 레이어 하나만 병합되며 복잡한 상태는 수동으로 병합해야 합니다.
Action
Action은 이벤트를 나타내는 하나 이상의 유형 속성을 포함하는 일반 JS 객체이며, 다른 속성을 사용하여 데이터를 전달할 수 있습니다. 실제로는 프로세스에 대해 함수가 정의됩니다. 프로세스는 네트워크 요청을 포함하고 최종적으로 Action을 반환할 수 있습니다. 이 함수를 Action Creator라고 합니다.
Code: Store는 이 Action을 전달할 수 있습니다. Action의 유형은 식별자를 나타내며 상태는 해당 Action이 전달하는 데이터입니다.
export const newState = state => { Store.dispatch({ type: ActionTypes.CSTATE, state, }); };
Persistence
작업이 트리거될 때 감소 키에 따라 데이터를 복원한 다음 애플리케이션이 시작될 때만 작업을 배포하면 됩니다. 이는 또한 구성 가능한 확장으로 쉽게 추상화할 수 있습니다. 실제로 타사 라이브러리 redux-persist가 이 모든 작업을 수행했습니다.
Action의 코드는 다음과 같습니다:
export const getStorage = async (key) => { const d = await AsyncStorage.getItem(key); return JSON.parse(d); }; export const setStorage = (key, value) => { AsyncStorage.setItem(key, JSON.stringify(value)); };
connect
By - getState() 메소드 제공. 모든 현재 상태를 가져옵니다
通过connect,绑定需要的state以及Action Creator到你的组件的props上,这样组件就可以通过props来调用Action Creator,或者根据不同props来render()不同的组件。
代码:
mapStateToProps({ newState }) { const value = newState[name];//name: newState.name return { name, }; },
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。
相关推荐:
JavaScript技巧中关于react-redux中connect()方法详细解析
위 내용은 .NET Core 클래스 라이브러리의 EF Core를 사용하여 데이터베이스를 SQL Server로 마이그레이션하는 방법_실용 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!