So sánh MobX và Redux

03.02.2021

0/5 (0 Reviews)

Tìm hiểu về So sánh MobX và Redux? Bạn có biết MobX và Redux là gì không? Không biết thì đọc bài viết này nhé

    Trước đây, mình từng có thời gian làm việc với Redux trong việc quản lý state, sau đó thì có cơ hội được biết đến mobx. Nhưng đến bây giờ mới có cơ hội trải nghiệm để sử dụng nó vào trong dự án. Từ kinh nghiệm của bản thân và đọc được 1 số bài viết, mình cũng xin phép được so sánh 1 chút về MobX và Redux trong việc quản lý state trong những dự án React.

    1) Một Store và Nhiều Store

    Store được định nghĩa đơn giản là 1 nơi bạn sẽ sử dụng để lưu trữ toàn bộ dữ liệu của app.

    Đối với Redux, đó là 1 store lớn dùng để lưu trữ toàn bộ state, tuy nhiên ở 1 số app có quy lớn, bạn có thể thấy store lớn sẽ được chia ra nhiều reducer nhỏ hơn để dễ quản lý hơn, nhưng dù vậy, nó vẫn được sử dụng với tinh thần là chỉ có 1 store duy nhất.

    Còn trong MobX, bạn có thể sử dụng nhiều store để lưu trữ và quản lý state của mình sao cho bản thân thấy hiệu quả nhất.

    2) Dữ liệu đơn thuần và dữ liệu Observable

    Redux chỉ đơn giản là lưu trữ dữ liệu và nếu bạn mong muốn app sẽ re-render khi dữ liệu thay đổi thì hầu như bạn phải làm việc đó.

    Khác với Redux, Mobx sử dụng observable để lưu trữ dữ liệu, điều đó có nghĩa nếu bạn thay đổi dữ liệu được lưu trữ bởi observable, bạn thay đổi nó, nó sẽ re-render mà không cần phải phải đụng chạm nhiều ( nghe tiện quá nhỉ ), ví dụ:

    class DemoStore {
      @observable demo = ['mobx', 'redux'];
    }
    
    const demoStore = new DemoStore();
    demoStore.demo.push('mobdux');
    

    App của bạn sẽ được re-render lại với dữ liệu mới sau khi demo đã thay đổi

    3) Dữ liệu bất biến và dữ liệu tùy biến

    Trong Redux, state sẽ luôn là dữ liệu bất biến, khi store nhận vào 1 state nó sẽ trả lại 1 state mới tương ứng, và không làm thay đổi state nhận vào, ví dụ:

    const initialState = {
     demo = ['mobx', 'redux'];
    
    // reducer
    function demo(state = initialState, action) {
     switch (action.type) {
     case 'ADD_DEMO':
       return { ...state, demo: [ ...state.demo, action.newDemo ] };
     default:
       return state;
     }
    }
    

    Như ví dự trên, bạn có thể thấy được Redux sẽ trả lại cho ta 1 state mới, và không làm thay đổi state cũ, vì thế chúng ta có thể coi Redux hoạt động như 1 pure function. Còn ở ví dụ trước đó với MobX, ta có thể thay đổi trực tiếp dữ liệu của state.

    4) Khả năng tiếp cận

    Qua những so sánh trên, bạn có thể mơ hồ nhận ra là MobX có thể sử dụng 1 cách nhẹ nhàng hơn , ít phải code hơn, và việc re-render app đã được MobX xử lý giúp bạn. Trong khi đó với Redux, đó có thể là cả 1 câu chuyện dài (đương nhiên là code cũng dài nữa). Vậy là MobX dễ tiếp cận hơn hẳn rồi, nhưng cũng không phải ngẫu nhiên Redux vẫn là 1 công cụ phổ biến để quản lý state. Chúng ta tìm hiểu nó ở lý do tiếp theo nhé

    5) Debug

    Trong Redux, muốn thay đổi 1 state, thay thông qua việc dispatch 1 action tương ứng, sau đó với state mới nhận về, ta cũng phải xử lý xem nó có ảnh hưởng tới việc render lại app hay không. Mặc dù lằng nhằng nhiều bước như vậy nhưng khi debug, bạn có thể 'đục' vào từng bước để xem bug ở đâu và xử lý gọn tại đó. Hơn nữa, dù làm dự án khác, nếu dự án đó dùng Redux, thì quy trình này vẫn không thay đổi điều cốt lõi của nó. Còn với MobX, thật sự mà nói, bạn vẫn có thể thông qua action để thay đổi state trong mobx, nhưng không ai bắt bạn làm vậy. Bạn có thể tự tạo ra quy trình cho mỗi dự án của mình. Thậm chí trong một dự án có thể có nhiều quy trình khác nhau nữa. Một điều quan trọng nữa, vì MobX tự động kiểm tra việc render, nên nếu có bug, trong việc re-render, bạn sẽ không thể điều tra từng tầng như redux được.

    6) Dự án vừa và lớn

    Với dự án vừa và nhỏ, bạn có thể tùy biến, sử dụng nhiều cách quản lý state và không lo mất nhiều thời gian để bảo trì mà fix bug => MobX phù hợp với dự án vừa và nhỏ. Nhưng với dự án lớn thì sao? Nó không được dùng à? Tất nhiên là được rồi. Tuy nhiên, trong dự án lớn, việc thống nhất quy trình, bảo dưỡng, quản lý được nâng lên 1 tầm cao mới, nó đòi hỏi việc nhất quán, thống nhất, chặt chẽ => Về mặt này thì Redux ăn chặt MobX (như cái cách venom bán hành cho TA vậy)

    Sau bài viết này, chắc hẳn bạn cũng được có 1 cái nhìn tổng quan hơn về MobX và Redux, nếu mình có gì sai sót, mong các bạn có thể góp ý bổ sung bên dưới, cảm ơn các bạn đã đọc bài viết của mình.

    CÓ THỂ BẠN QUAN TÂM

    Bài Viết Cùng Chuyên Mục

    XEM THÊM
    thumbnail

    Global Entreprep Incubator 2025: Cùng mang Start up của bạn ra thế giới cùng VinUni

    11.08.2025

    Chương trình Vườn ươm Khởi nghiệp Toàn cầu VinUni 2025 (GE25) được định vị là một chương trình tăng tốc chuyên sâu kéo dài 12 tuần, được thiết kế đặc biệt cho các startup công nghệ

    thumbnail

    Grok AI: Giới thiệu chi tiết về chatbot của Elon Musk

    04.03.2025

    Grok là một chatbot AI tiên tiến, được phát triển bởi xAI, công ty do Elon Musk sáng lập. Ra mắt lần đầu vào tháng 11/2023, Grok được thiết kế để cạnh tranh với các mô hình AI nổi tiếng như ChatGPT

    thumbnail

    Hướng dẫn xoá Google Analytics Universal mới nhất

    10.07.2024

    Một số người dùng đang gặp vấn đề khi muốn xoá tài khoản Google Analytics Universal ra khỏi GA của mình nhưng không xoá được, đây là hướng dẫn dành cho bạn

    thumbnail

    Xây dựng với các mô hình Gemini trong Project IDX

    13.03.2024

    Một vài tuần trước, Google đã công bố một loạt bản cập nhật sản phẩm cho Project IDX để giúp hợp lý hóa và đơn giản hóa việc phát triển phần mềm đa nền tảng, toàn bộ.

    thumbnail

    Google Project IDX là gì? Những điều bạn chưa biết về Google Project IDX

    22.12.2023

    Google Project IDX là Intelligent Development Xperience. IDX được thiết kế để giúp các nhà phát triển xây dựng ứng dụng nhanh hơn, dễ dàng hơn và hiệu quả hơn.