Vấn đề quan trọng của project là bảo trì và từng người trong team phối hợp ăn ý với nhau. Team của bạn đã dùng Saga để fetch API thì cứ dùng Saga đi. Vì đó là quy định từ trước của team rồi.
Giả sử sau này, bạn làm theo ý bạn. Rồi có 1 bug xảy ra tại phần Sign Up, hay đổi url gọi sign up, hay đơn thuần là theo các error khác, mở rộng nhiều cách login, blabla… Lúc đó bạn qua công ty khác rồi. Đứa khác vô sửa code, nó theo đúng quy trình công ty, đây là api thì nó mở bên API, mò không ra, hỏi lead, lead hỏi lại, tìm trong đó đi, nó lại bảo không có anh ơi, kèm mặt mếu
. Lead thấy là lạ, xem vào, api gọi sign up của tui đâu, đứa nào làm cái này vậy, kèm mặt hốt hoảng
Lead gọi Product Manager, hỏi ai code phần này vậy, PM xem task history, thì thấy bạn
. Lead tức tốc gọi điện hỏi: trước em làm phần này ở đâu vậy? cứu bọn anh với?
Hỏi ra té ra gọi thì biết async API trong React component, do em lười nên code vô 1 chỗ cho nhanh
. Thế là bạn đã có 1 quả bóp team thành công. ![:joy: :joy:](https://daynhauhoc.com/images/emoji/twitter/joy.png?v=5)
Trả lời đàng hoàng, thì dù bạn sử dụng gì Redux, Saga, Thunk, MobX, bạn cũng nên nhớ, tất cả những thứ đó đều là tool để bạn build sản phẩm, cũng như không có tool nào phù hợp tất cả các use-case.
Việc thực hiện 1 side effect ngay trong React Component hay thông qua Saga đều được hết. Theo mình, mình sẽ viết trực tiếp vào React Component nếu side effect chỉ ảnh hưởng 1 component, không ảnh hưởng component cha hay các component con. Các side effect đó thường là UI như animation, check/unchecked 1 checkbox, check giữa 1 tập các radio buttons, validate thuộc tính value của text input. Các side effect này quá nhỏ để có thể đưa vào Redux như 1 state riêng.
Các side effect liên quan đến business logic, như authentication, mình sẽ chuyển state liên quan lên Redux hơn là viết vào React Component.
Về store thì khi học Redux thường chỉ có 1 global store, nhưng bạn có thể tạo bao nhiêu store cũng được. Mình thiên về tạo nhiều store, mỗi store độc lập với nhau. Một app sẽ gồm 1 global store, chỉ lưu khi không có chỗ nào hợp lý để đặt vào. User store lưu trữ đăng nhập, mình sẽ lưu thông tin về sign up, login, logout vào user store, đây cũng là câu trả lời của mình cho câu hỏi bạn đưa. Wiki store để lưu các bài blog kĩ thuật, cart store lưu giỏ hàng, schedule store lưu lịch trình công việc nội bộ,…