Rules of Reducers
=> Quy tắc 1 : Phải trả về bất kì giá trị nào ngoại trừ Undefined
=> Quy tắc 2 :
Các Reducers phải
+ Tạo ra hoặc giữ nguyên dữ liệu trong payload của action đầu vào.
+ Chỉ được sử dụng các dữ liệu bên trong ứng dụng và chỉ được sử dụng state trước đó => từ lần cuối
cùng nó được gọi và action object được pass vào một Reducers nhất định.
=> Quan sát sơ đồ, bạn biết rằng mỗi Reducers sẽ được tự động gọi một lần đầu tiên khi khởi tạo App, đây là một tính chất mà về cơ bản cho phép các Reducers chỉ định một số state mặc định.
- Trong lần đầu tiên Reducers sẽ nhận vào 2 đối số đó là undefined và đối số thứ 2 sẽ là một ActionCreate nó là ActionCreate đầu tiên được truyền vào các Reducers (nó đơn giản chỉ là một hành động có type bất kì mặc định của React) => Trong lần đầu tiên chạy Reducers tạo ra State V1.
=> Vậy điều gì xảy ra khi các Reducers được gọi lần thứ 2 3 4
+ Trong nhưng lần sau đối số đầu tiên không còn là undefined nữa mà thay vào đó là bất cứ thứ gì mà reducers trả lại lần cuối khi nó được chạy, trong ví dụ này nó chính là State V1
Vì vậy về cơ bản đối số đầu tiên trong Reducers của bạn luôn là những gì nó được trả lại lần cuối cùng nó được chạy.(bản chất là vẫn truyền vào state nhưng state mỗi lần được xử lý ở reducers sẽ bị thay đổi hoặc không , nhưng reducers luôn trả về một bản sao của state)
=> Sự thay đổi thực sư qua mỗi lần tạo duy nhất ở đây là những Action bạn truyền vào Reducers
=> Quy tắc 3 :
Bất cứ lúc nào chúng ta invoked một Reducers bằng một Action và State trước đó của chúng ta nó KHÔNG được phép thực hiện các hành động như Call API , đọc dữ liệu ổ cứng...tóm lại khi một reducers được kích hoạt nó chỉ được sử dụng giá trị State và Action được truyền cho mà thôi, bạn chỉ được tính toán dựa vào 2 đối số đầu vào vậy thôi.
=> Quy tắc 4 : Bạn không được thay đổi (mutabe) đối số state mà bạn truyền vào hàm.
Thành thật mà nói Redux sẽ không bao giờ cung cấp cho bạn bất kỳ thông báo lỗi nào khi bạn mutabe các thuộc tính trên state truyền vào => Chương trình có thể hoạt động hết sức bình thường
vậy thì tại sao mọi người lại khuyên rằng không được mutabe đối số state ?
=> Bởi vì sẽ có một trường hợp mà khi bạn mutabe state thì ứng dụng của bạn sẽ không hoạt động, để tránh chương trình bị lỗi chúng ta sẽ thống nhất rằng từ nay về sau sẽ không bao giờ mutabe state nữa.
* Để giải thích lỗi này chúng ta sẽ phân tích mã nguồn của redux
Hàm này có nhiệm vụ giúp dispatch gửi các Action cho các Reducers => nói đơn giản rằng mỗi khi bạn gửi một Action, đoạn code trên sẽ được thực thi.
- Vòng lặp for sẽ lặp qua các mảng các key mà bạn truyền vào trong combineReducers.(Các key này cũng chính là các key trong Object State)
- Nó sẽ invoked hàm reduce
=> Lý do bạn không nên mutabe state truyền vào là do, nếu mutabe state thì state đầu vào nó vẫn là chính nó => khi bạn so sánh nextStateForKey và previousStateForKey sẽ luôn trả về true => không có sự thay đổi nào kể cả khi bạn thay đổi state thật sự đi chăng nữa => Nếu bạn mutabe state thì bạn đang thay đổi trên chính state, so sánh state với chính state thì luôn trả về true => bạn cần tạo ra một bản sao của state để so sánh với phiên bản cũ gần nhất của nó.

Nhận xét
Đăng nhận xét