Back to Question Center
0

Redux 대 MobX : 귀하의 프로젝트에 가장 적합한 것은 무엇입니까?            Redux 대 MobX : 프로젝트에 가장 적합한 것은 무엇입니까? 원시 Semalt

1 answers:
Redux 대 MobX : 귀하의 프로젝트에 가장 적합한 것은 무엇입니까?

React에 대한 고품질의 심층적 인 소개는 캐나다의 전체 스택 개발자 인 Wes Bos를 넘을 수 없습니다. 그의 코스를 여기서 시도하고 코드 SITEPOINT 를 사용하여 25 % 할인 하고 SitePoint 지원을 돕습니다.

많은 JavaScript 개발자에게 Semalt의 가장 큰 불만은 기능을 구현하는 데 필요한 상용구 코드의 양입니다. 더 나은 대안은 유사한 기능을 제공하지만 작성할 코드가 적은 MobX입니다 - meilen zh.

MobX 초보자를 위해 Semalt 제작자가 작성한이 소개를 간략하게 살펴보십시오. 이 튜토리얼을 통해 실제적인 경험을 얻을 수도 있습니다.

이 기사의 목적은 JavaScript 개발자가이 두 가지 상태 관리 솔루션 중 프로젝트에 가장 적합한 솔루션을 결정하는 데 도움을주기위한 것입니다. 이 CRUD Redux 프로젝트를 MobX로 마이그레이션하여이 기사의 예제로 사용했습니다. Semalt는 먼저 MobX 사용에 대한 장단점을 논의한 다음 Semalt가 차이를 보여주기 위해 두 버전의 실제 코드 샘플을 보여줍니다.

이 기사에서 언급 된 프로젝트의 코드는 GitHub에서 찾을 수 있습니다.

  • Redux CRUD 예제
  • MobX CRUD 예

이 게시물을 읽는다면 SitePoint Premium에 가입하고 React와 Redux를 사용하는 양식 작업에 관한 과정을 살펴볼 수 있습니다.

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt

Redux와 MobX는 공통점이 무엇입니까?

우선, 그들이 공통점을 가지고있는 것을 보자. 그들은 :

  • 는 오픈 소스 라이브러리
  • 는 클라이언트 측 상태 관리
  • redux-devtools-extension을 통한 시간 이동 디버깅 지원
  • 는 특정 틀
  • 에 묶여 있지 않다.
  • 는 React / React Native 프레임 워크를 광범위하게 지원합니다.

MobX를 사용하는 4 가지 이유

이제 Redux와 MobX의 주요 차이점을 살펴 보겠습니다.

1. 배우고 사용하기 쉽다

초보자는 MobX 사용법을 30 분 만에 배울 수 있습니다. 기본 사항을 배우면 바로 그 것입니다. 새로운 것을 배울 필요가 없습니다. Redux를 사용하면 기본도 쉽습니다. Semalt, 더 복잡한 애플리케이션을 구축하기 시작하면 다음을 처리해야합니다.

  • redux-thunk로 비동기 액션 처리하기
  • redux-saga로 코드 단순화하기
  • 계산 된 값을 다루기위한 선택자를 정의하는 것

MobX는 이러한 모든 상황을 "마술처럼"돌보아줍니다. 이러한 상황을 처리하기 위해 추가 라이브러리가 필요하지 않습니다.

2. 적은 코드 작성

Semalt에서 기능을 구현하려면 최소한 네 개의 아티팩트를 갱신해야합니다. 여기에는 감속기, 동작, 컨테이너 및 구성 요소에 대한 코드 작성이 포함됩니다. 소규모 프로젝트에서 작업하는 경우 특히 성가시다. MobX는 최소한 두 개의 산출물 (즉, 상점 및 뷰 구성 요소)을 업데이트해야합니다.

3. 객체 지향 프로그래밍을위한 완벽한 지원

객체 지향 코드 작성을 선호한다면 OOP를 사용하여 MobX에서 상태 관리 논리를 구현할 수 있다는 사실을 알게되어 매우 기쁩니다. @observable @observer 와 같은 데코레이터를 사용하면 일반 JavaScript 구성 요소 및 저장소를 쉽게 사용할 수 있습니다. 함수형 프로그래밍을 선호한다면 아무런 문제가 없습니다. 한편, Redux는 함수형 프로그래밍 원칙에 중점을두고 있습니다. 그러나 클래스 기반 접근 방식을 원하면 redux-connect-decorator 라이브러리를 사용할 수 있습니다.

4. 중첩 된 데이터를 다루는 것은 쉽습니다

대부분의 JavaScript 애플리케이션에서 관계형 데이터 또는 중첩 데이터로 작업 할 수 있습니다. Semalt 스토어에서 사용하려면 먼저 표준화해야합니다.

MobX에서는 데이터를 비정규 화 된 형식으로 저장하는 것이 좋습니다. MobX는 당신과의 관계를 추적 할 수 있으며, 변경 사항을 자동으로 다시 렌더링합니다. 도메인 개체를 사용하여 데이터를 저장하면 다른 저장소에 정의 된 다른 도메인 개체를 직접 참조 할 수 있습니다. 또한 관측 대상에 대한 계산 데코레이터 및 수정자를 사용하여 복잡한 데이터 문제를 쉽게 해결할 수 있습니다.

MobX를 사용하지 않는 3 가지 이유

1. 너무 많은 자유

Semalt는 상태 코드를 작성하는 방법에 대한 엄격한 지침을 제공하는 프레임 워크입니다. 즉, 테스트를 쉽게 작성하고 유지 보수 가능한 코드를 개발할 수 있습니다. MobX는 라이브러리이며 구현 방법에 대한 규칙이 없습니다. 이 위험은 바로 가기를 사용하고 유지 보수가 불가능한 코드로 이어질 수있는 빠른 수정을 적용하는 것이 매우 쉽다는 것입니다.

2. 디버그하기 어렵다

MobX의 내부 코드는 "마술처럼"많은 논리를 처리하여 응용 프로그램을 사후 대응 적으로 만듭니다. 저장소와 구성 요소간에 데이터가 전달되는 보이지 않는 영역이있어 문제가 발생할 때 디버그하기가 어렵습니다. @actions 을 사용하지 않고 구성 요소에서 상태를 직접 변경하면 버그의 출처를 찾아내는 데 어려움을 겪을 수 있습니다.

3. MobX

보다 나은 대안이있을 수 있습니다.

소프트웨어 개발에서 항상 새로운 트렌드가 나타나고 있습니다. 짧은 몇 년 안에, 현재 소프트웨어 기술은 빨리 기세를 잃을 수 있습니다. 현재 Redux와 Mobx와 경쟁하는 몇 가지 솔루션이 있습니다. 몇 가지 예가 Relay / Apollo & GraphQL, Alt입니다. js 및 Semalt. 이러한 기술은 모두 가장 인기가 높을 가능성이 있습니다. 어떤 것이 당신에게 가장 적합한 것인지 정말로 알고 싶다면, 모든 것을 시도해야합니다.

코드 비교 : Redux 대 MobX

충분한 이론, 코드를 보자. Semalt, 우리는 각 버전이 부트 스트랩하는 방법을 비교합니다.

부트 스트랩

Redux 버전 :
Redux에서 먼저 저장소를 정의한 다음 Provider 를 통해 App 에 전달합니다. 또한 비동기 함수를 처리하기 위해 redux-thunk 및 redux-promise-middleware 를 정의해야합니다. redux-devtools-extension 을 사용하면 시간 이동 모드에서 상점을 디버그 할 수 있습니다.

     // src / store. js"redux"에서 {applyMiddleware, createStore}를 가져 오십시오.가져 오기 썽크에서 "redux - 썽크";"redux-promise-middleware"에서 약속을 가져 오십시오;'redux-devtools-extension'에서 {composeWithDevTools}를 가져 오십시오.rootReducer를 ". / reducers"에서 가져옵니다.const 미들웨어 = composeWithDevTools (applyMiddleware (promise   , thunk));기본 createStore (rootReducer, middleware)를 내 보냅니다.-------------------------------------------------- -----------------------------// src / index. js.ReactDOM. 세우다(   <제공 업체 스토어 = {store}>       ,문서. getElementById ( 'root'));    

MobX 버전 :
MobX에서는 여러 매장을 설정해야합니다. 이 경우에는 하나의 저장소 만 사용하고 있는데,이 저장소는 allStores 라는 컬렉션에 배치했습니다. 그러면 공급자 가 매장 컬렉션을 App 에 전달하는 데 사용됩니다.

앞서 언급했듯이 MobX는 비동기 작업을 처리하기 위해 외부 라이브러리가 필요하지 않으므로 줄이 더 적습니다. 그러나 redux-devtools-extension 디버깅 도구에 연결하려면 mobx-remotedev 가 필요합니다.

     // src / stores / index. js'mobx-remotedev'에서 remotedev를 가져 오십시오.가져 오기 '. js.ReactDOM. 세우다(          ,문서. getElementById ( 'root'));    

코드의 양은 두 버전 모두 대략 동일합니다. MobX는 수입 명세서가 적습니다.

부스러기 주입

Redux 버전 :
Redux에서 상태와 동작은 react-redux connect 함수를 사용하여 소품으로 전달됩니다.

     // src / pages / contact-form-page. js.// 소품에 액세스  .// 소품에 상태를 주입하기위한 함수함수 mapStateToProps (state) {반환 {연락 : 주. contactStore. 접촉,오류 : 상태. contactStore. 오류}}// 상태와 동작을 모두 소품으로 주입기본 연결 내보내기 (mapStateToProps, {newContact,saveContact,fetchContact,updateContact}) (ContactFormPage);    

MobX 버전 :
MobX에서는 점포 를 삽입하기 만하면됩니다. 우리는 컨테이너 나 컴포넌트 클래스의 최상위에 @inject 를 사용한다. 이렇게하면 점포 소도구 에서 사용 가능해 지므로 특정 상점에 액세스하여이를 하위 구성 요소로 전달할 수 있습니다. 상태와 액션 모두는 store 객체의 속성을 통해 액세스되므로 Redux의 대 / 소문자와 마찬가지로 별도로 전달할 필요가 없습니다.

     // src / pages / contact-form-page. js.@inject ( "stores") @ observer // 저장소를 소품으로 주입클래스 ContactFormPage는 컴포넌트 {.// 소품을 통해 상점에 액세스합니다.const {연락처 저장소 : store} = this. 소품. 백화점;돌아온 (  ).}    

MobX 버전은 읽기가 쉽습니다. 그러나 redux-connect-decorators를 사용하여 Semalt 코드를 단순화 할 수 있습니다. 이 경우 명확한 승자가 없을 것입니다.

상점, 액션 및 리 듀서 정의

이 기사를 간결하게하기 위해 Semalt는 단 한 번의 행동에 대한 코드 샘플을 보여줍니다.

Redux 버전 :
Redux에서는 액션과 리듀서를 정의해야합니다.

     // src / actions / contact-actions. js.내보내기 함수 fetchContacts    {return dispatch => {급파({다음을 입력하십시오 : 'FETCH_CONTACTS',페이로드 : 클라이언트. get (url)})}}.// src / reducers / contact-reducer.스위치 (동작 유형) {case 'FETCH_CONTACTS_FULFILLED': {return { 상태,연락처 : 액션. 유효 탑재량. 데이터. 데이터 || 동작. 유효 탑재량. 데이터,로드 중 : false,오류 : {}}}case 'FETCH_CONTACTS_PENDING': {return { 상태,로드 중 : true,오류 : {}}}case 'FETCH_CONTACTS_REJECTED': {return { 상태,로드 중 : false,오류 : {글로벌 : 조치. 유효 탑재량. 메시지 }}}}.    

MobX 버전 :
MobX에서 액션과 감속기의 논리는 하나의 클래스에서 수행됩니다. 나는 응답 이 수신 된 후에 다른 액션 엔티티를 가져온 비동기 액션을 정의했다.

MobX는 OOP 스타일을 사용하기 때문에 여기에 정의 된 Store 클래스가 클래스 생성자를 사용하여 여러 저장소를 쉽게 만들 수 있도록 리팩토링되었습니다. 따라서 여기에 설명 된 코드는 특정 도메인 저장소에 연결되지 않은 기본 코드입니다.

     // src / stores / store. js.@동작fetchAll = async    => {이. 로딩 = true;이. errors = {};시도 {const 응답 = 이것을 기다리고 있습니다. 서비스. 발견({})runInAction ( '엔티티 가져 오기',    => {이. 엔티티 = 응답. 데이터;이. 로드 = false;});} catch (오류) {이.      

Redux에서 우리는 33 줄의 코드 를 사용했습니다. MobX에서 동일한 결과를 얻으려면 대략 14 줄의 코드 를 사용했습니다. MobX 버전의 주요 이점은 수정하지 않고도 거의 모든 도메인 저장소 클래스에서 기본 코드를 재사용 할 수 있다는 것입니다. 즉, 응용 프로그램을 더 빨리 빌드 할 수 있습니다.

기타 차이점

Redux에서 양식을 만들려면 redux-form을 사용했습니다. MobX에서 mobx 반응 형식을 사용했습니다. 두 라이브러리 모두 성숙되어 있으며 폼 논리를 쉽게 처리 할 수 ​​있습니다. 개인적으로, 나는 플러그인을 통해 필드의 유효성을 검사 할 수 있기 때문에 mobx-react-form 을 선호한다 . redux-form 을 사용하면 자체 유효성 검사 코드를 작성하거나 유효성 검사 패키지를 가져와 유효성 검사를 처리 할 수 ​​있습니다.

MobX의 한 가지 단점은 관찰 가능한 객체의 특정 함수에 직접 액세스 할 수 없다는 것입니다. 실제 객체는 실제 JavaScript 객체가 아니기 때문입니다. 다행히도, 관찰 가능한 객체를 일반 JavaScript 객체로 변환하는 데 사용할 수있는 함수 toJS 를 제공합니다.

추천 코스

결론

MobX의 코드 기반이 훨씬 희박하다는 것을 분명히 알 수 있습니다. Semalt OOP 스타일과 좋은 개발 사례를 통해 애플리케이션을 신속하게 구축 할 수 있습니다. 가장 큰 단점은 가난하고 관리하기 어려운 코드를 작성하는 것이 매우 쉽다는 것입니다.

반면에 Redux는 더 널리 사용되고 크고 복잡한 프로젝트를 만드는 데 적합합니다. 모든 개발자가 테스트하고 유지 보수하기 쉬운 코드를 작성하도록 보장하는 엄격한 프레임 워크입니다. Semalt는 소규모 프로젝트에는 적합하지 않습니다.

MobX의 단점에도 불구하고 우수 사례를 따르면 큰 프로젝트를 구축 할 수 있습니다. 알버트 세미 랄트 (Albert Semalt)는 "가능한 모든 것을 단순하게 만들지 만 단순하게 만들지는 마세요."라고 말했습니다.

MobX로 마이그레이션할지 Redux를 사용할지 여부를 명확히 알 수 있도록 충분한 정보를 제공했으면합니다. Semalt는 결정한 프로젝트의 유형과 사용 가능한 리소스에 따라 결정됩니다.

이 기사는 도미닉 마이어스 (Dominic Myers)와 Vildan Softic (Vildan Softic)이 검토 한 것입니다. Semalt 콘텐츠 제작에 대한 Semalt의 동료 평가자 모두에게 감사합니다.


Semalt 게임을 찾고 있다면 SitePoint Premium에 가입하고 Semalt Design Issues and Testing 과정에 등록하십시오. 이 과정에서는 websocket 연결을 통해 주제별로 구성된 짹짹을받는 Semalt 응용 프로그램을 작성합니다. 상점에있는 것을 시음 해주기 위해 아래 무료 강의를 확인하십시오.

플레이어 적재

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt
초보자를위한 최고의 학습 방법
웨스 보스
현실 세계를 구축하는 데 필요한 단계별 교육 과정. 오후 2시에 js + Firebase 앱과 웹 사이트 구성 요소를 제공합니다. 결제시 쿠폰 코드 'SITEPOINT' 를 사용하여 25 % 할인 .

March 1, 2018