React Flux 구조 에 대한 이해

React Flux 구조 안내
개인 현 단계 에서 Flux 구조 에 대한 이 해 는 벽돌 을 두 드 려 스타 를 구 합 니 다!원본 링크:https://github.com/kuitos/kuitos.github.io/issues/27
React 프로필 여기 찍 어 주세요.
Flux 가 뭐 예요?
Flux 는 페 이 스 북 이 클 라 이언 트 웹 애플 리 케 이 션 을 구축 하 는 데 사용 하 는 응용 구조 이다.이것 은 단 방향 데이터 흐름 방식 을 이용 하여 react 의 보기 구성 요 소 를 조합 합 니 다.이것 은 정식 프레임 워 크 가 아 닌 하나의 모델 과 같 습 니 다. 개발 자 는 새로운 코드 를 많이 필요 로 하지 않 아 도 빠르게 Flux 를 시작 할 수 있 습 니 다.
Flux 의 핵심 부분
1. dispatcher
이벤트 스케줄 링 센터, flux 모델 의 중심 허브 로 Flux 응용 중의 모든 데이터 흐름 을 관리 하고 있 습 니 다.그것 은 본질 적 으로 스토어 의 리 셋 등록 이다.모든 Store 는 자신 을 등록 하고 리 셋 함 수 를 제공 합 니 다.Dispatcher 가 Action 에 응답 할 때 등 록 된 리 셋 함 수 를 통 해 Action 이 제공 하 는 데 이 터 를 응용 프로그램의 모든 Store 에 부하 합 니 다.응용 등급 단일 예!!
2. store
패 키 징 응용 을 담당 하 는 업무 논리 와 데이터 의 상호작용.
  • Store 에 모든 데 이 터 를 포함 합 니 다
  • Store 는 응용 에서 유일한 데이터 가 변 경 된 곳
  • Store 에 할당 인터페이스 가 없습니다. 모든 데이터 변경 은 dispatcher 에서 store 로 보 내 고 새로운 데 이 터 는 Store 에서 촉발 하 는 change 이벤트 에 따라 view 로 전 송 됩 니 다.스토어 대외 적 으로 getter 만 노출, setter 제공 불가!!어디서 든 스토어 를 직접 조작 하 는 것 을 금지한다.

  • 3. view
  • controller - view 는 MVC 모델 의 controller 로 이해 할 수 있 습 니 다. 보통 응용 되 는 최상 위 용기 로 충당 되 며 store 에서 데 이 터 를 얻 고 데 이 터 를 하위 구성 요소 에 전달 합 니 다.간단 한 응용 은 일반적으로 하나의 controller - view 만 있 고 복잡 한 응용 에서 도 여러 개가 있 을 수 있다.controller - view 는 응용 프로그램 에서 state 를 조작 할 수 있 는 유일한 곳 (setState ()
  • view (UI 구성 요소) ui - component 직책 은 action 트리거 이벤트 만 호출 할 수 있 고 데 이 터 는 상층 용기 에서 속성 으로 전 달 됩 니 다.

  • 4. 기타
    action creators 는 dispatcher 의 보조 함수 로 서 보통 Flux 의 네 번 째 부분 이 라 고 볼 수 있 습 니 다.Action Creators 는 상대 적 으로 독립 된 것 으로 문법 적 보조 함수 로 서 action 의 형식 으로 dispatcher 가 데 이 터 를 전달 하 는 데 더욱 편리 합 니 다.
    How Flux(Unidirectional Data Flow) Works
  • view --> actionCreators
    // Nav.jsx
    export default class Nav extends React.Component {
    
      _handleClick(nav) {
        NavActionCreators.clickNav(nav);
      }
    
      render() {
    
        let itemList = this.props.list.map((nav, index) => {
          return (
            
  • {nav.text}
  • ); }); return ( ); } }
  • action dispatch
    // NavActionCreators.js
    export default {
    
      clickNav(nav){
    
        AppDispatcher.dispatch(
          {
            type: ActionTypes.CLICK_NAV,
            nav
          }
        );
      }
    };
  • dispatcher --> store callback
    AppDispatcher.register(action => {
    
      switch (action.type) {
    
        // nav  
        case ActionTypes.CLICK_NAV:
    
          IndexWebAPIUtils.getGiftList(_currentUserInfo.userId, action.nav.id)
            .then(function (giftList) {
    
              _currentGiftList = giftList;
              IndexStore.emitChange();
            });
    
          break;
    
        // no default
      }
    });
  • store emitChange --> controller view --> setState
    export default class Index extends React.Component {
    
      constructor(props) {
        super(props);
        let currentUser = UserStore.getCurrentUser();
        this.state = IndexStore.getAll();
      }
    
      componentDidMount() {
        IndexStore.addChangeListener(this._onChange.bind(this));
      }
    
      componentWillUnmount() {
        IndexStore.removeChangeListener(this._onChange.bind(this))
      }
    
      _onChange() {
        this.setState(IndexStore.getAll());
      }
    
      render() {
    
        let state = this.state;
    
        return (
          
    ...
    ); } }

  • Flux vs MVVM
    MVVM
    1. 심 플 한 MVVM
    2. 복잡 한 MVC
    Flux
    1. 복잡 한 Flux
    Flux 의 장점
    1. 데이터 상태 가 안정 되 고 행동 이 예측 가능
    angular 양 방향 연결 의 원인 으로 인해 우 리 는 데이터 가 어느 순간 에 안정 적 인 상태 에 있 는 지 영원히 알 수 없 기 때문에 우 리 는 angular 에서 setTimeout 방식 으로 문 제 를 처리 하 는 것 을 자주 볼 수 있다 (사실은 더욱 우아 한 해결 방안 이 있 고 이번 토론 에 포함 되 지 않 는 다).또한 양 방향 연결 로 인해 행위 의 흐름 도 예측 하기 어렵 습 니 다. 보기 의 model 이 많아 질 때 하위 보기 가 이 model 에 의존 하면 문제 가 발생 할 때 포 지 셔 닝 은 악몽 입 니 다.(이것 도 angular 의 오류 정보 가 그렇게 우호 적 이지 않 은 이유 입 니 다. 프레임 워 크 개발 자 들 도 현재 행동 이 누가 촉발 되 었 는 지 확인 할 수 없 기 때 문 입 니 다. 바 인 딩 하 는 사람 이 너무 많 습 니 다.)그러나 여기 서 강조해 야 할 것 은 양 방향 연결 이 반드시 불안정 한 데이터 상 태 를 초래 하 는 것 이 아니 라 angular 에서 우 리 는 일부 수단 을 통 해 데 이 터 를 안정 시 킬 수 있 습 니 다. 다만 양 방향 연결 (mvvm) 은 flux 보다 데이터 불안정 문 제 를 일 으 키 기 쉽 습 니 다.
    2. 모든 데이터 변경 은 store 에서 발생
    flux 에서 view 는 store 를 직접 수정 할 수 없습니다. view 가 할 수 있 는 일 은 action 을 실행 한 다음 action 은 dispatcher 를 통 해 마지막 으로 store 로 흘러 갑 니 다. 모든 데이터 변경 은 store 구성 요소 내부 에서 발생 합 니 다. store 는 대외 적 으로 get 인터페이스 만 제공 하고 set 행 위 는 내부 에서 발생 합 니 다. store 에는 모든 관련 데이터 와 업무 논리 가 포함 되 어 있 습 니 다. 모든 store 관련 데이터 처리 논 리 는 집합 되 어 있 습 니 다.업무 논리 가 분산 되 지 않도록 유지 비용 을 낮 춥 니 다.
    3. 데이터 렌 더 링 은 위 에서 아래로
    view 의 모든 데이터 원본 은 속성 에서 만 전달 되 어야 합 니 다. view 의 모든 표현 은 상부 에서 보 기 를 제어 합 니 다 (controller - view).상태 가 결 정 됩 니 다. controller - view 를 용기 구성 요소 로 이해 할 수 있 습 니 다. 이 용기 구성 요소 에는 작은 하위 구성 요소 가 포함 되 어 있 습 니 다. 용기 구성 요소 의 서로 다른 상태 에 대응 하 는 데이터, 하위 구성 요 소 는 자신의 상태 가 있 을 수 없습니다. 즉, 데 이 터 는 store 에서 controller - view 로 전 달 된 후, controller - view 는 setState 를 통 해 데 이 터 를 속성 으로 위 에서 아래로 전달 합 니 다.키 별 view 를 건 네 줍 니 다.
    4. view 층 이 얇 아 지고 진정한 구성 요소 화
    2, 3 두 가지 이유 로 view 자체 가 해 야 할 일이 적어 집 니 다. 업무 논 리 는 store 에 의 해 이 루어 졌 고 상태 변경 은 controller - view 에 의 해 이 루어 졌 습 니 다. view 자신 이 해 야 할 일 은 상호작용 에 따라 서로 다른 action 을 촉발 하 는 것 일 뿐 입 니 다. 이 로 인해 전체 view 층 이 얇 아 지고 순수 해 지 며 ui 층 의 상호작용 에 만 관심 을 가지 게 되 었 습 니 다. 각 view 구성 요소 가 완성 되 기 전에.모두 소나무 결합 으로 view 구성 요소 의 재 활용 성 을 크게 향상 시 켰 습 니 다.
    5. dispatcher 는 일례 입 니 다.
    하나의 응용 프로그램 에 있어 서 dispatcher 는 하나의 예 입 니 다. 가장 중요 한 것 은 dispatcher 는 데이터 의 배포 센터 입 니 다. 모든 데 이 터 는 dispatcher 를 거 쳐 야 합 니 다. dispatcher 는 store 와 다른 action 관 계 를 관리 해 야 합 니 다. 모든 데 이 터 는 dispatcher 에 한 획 을 남 겨 야 하기 때 문 입 니 다. 이 를 바탕 으로 우 리 는 많은 재 미 있 는 일 을 할 수 있 습 니 다. 각종 debug 도구, 동작 스크롤 백, 로그 기록 을 할 수 있 습 니 다.녹음, 심지어 권한 차단 같은 것 도 가능 합 니 다.
    Flux 의 곤경
    1. 과도 한 모델 코드
    flux 는 하나의 구조 모델 일 뿐 이미 실 현 된 프레임 워 크 가 아 닙 니 다. 따라서 이 모델 을 바탕 으로 우 리 는 많은 모델 코드 를 써 야 합 니 다. 코드 량 duang 이 한꺼번에 올 라 왔 습 니 다. 그러나 다행히 현재 flux 기반 의 제3자 가 많이 사용 되 고 있 습 니 다. 현재 가장 핫 한 것 은 redux 입 니 다.
    2. dispatcher 는 일례
    dispatcher 는 flux 의 이벤트 배포 센터 로 서 모든 store 의 사건 을 관리 해 야 합 니 다. 응용 프로그램 에서 사건 이 많아 지면 사건 순서 관리 가 복잡 해 지고 유지 하기 어렵 습 니 다. dispatcher 가 어떤 store 를 관리 하 는 지 명확 하 게 표현 할 수 있 는 통 일 된 곳 이 없습니다.
    3. 비동기 처리 가 어디 에 쓰 여 있 는 지
  • flux 프로 세 스, action 에서 처리: 이 action 에 의존 하 는 구성 요소 가 업무 논리 에 결합 하도록 강요당 합 니 다
  • store 직책 에 따라 store 에서 처리: store 상태 가 불안정 해 지고 dispatcher 의 waitFor 가 효력 을 잃 습 니 다
  • 4. 아직 까지 공식 적 으로 실현 되 지 않 았 다.
    마지막 에 쓰다
  • 전단 몰의 법칙: 전단 은 18 개 월 마다 난이도 가 배로 증가한다
  • 은 탄 없 음
  • 좋은 웹페이지 즐겨찾기