Nếu bạn coi chuỗi hành động trong ứng dụng của mình giống như một danh sách hoặc có thể giống một luồng hơn, thì điều đó có thể có ý nghĩa hơn.
Lấy ví dụ giả định này:
['apple', 'banana', 'cherry'].reduce((acc, item) => acc + item.length, 0)
Đối số đầu tiên là một hàm của biểu mẫu (Int, String) => Int
. Cùng với một giá trị ban đầu, bạn chuyển reduce
cái có thể được gọi là "hàm giảm thiểu" và bạn nhận được kết quả của việc xử lý chuỗi các mục. Vì vậy, bạn có thể nói, hàm giảm thiểu mô tả những gì được thực hiện với từng mục riêng lẻ liên tiếp để thay đổi kết quả. Nói cách khác, hàm giảm thiểu lấy giá trị đầu ra trước đó và giá trị tiếp theo, và nó sẽ tính toán đầu ra tiếp theo.
Điều này tương tự như những gì một bộ giảm thiểu Redux làm: nó nhận trạng thái trước đó và hành động hiện tại, và nó tính toán trạng thái tiếp theo.
Trong phong cách lập trình chức năng thực sự, bạn có thể xóa bỏ ý nghĩa được áp dụng cho các đối số và kết quả, và chỉ tập trung vào "hình dạng" của các đầu vào và đầu ra.
Trong thực tế, các bộ giảm Redux thường trực giao, theo nghĩa là đối với một hành động nhất định, chúng không thực hiện thay đổi tất cả các thuộc tính giống nhau, điều này giúp dễ dàng phân chia trách nhiệm và tổng hợp đầu ra combineReducers
.
reduce
, có quyền truy cập vào giá trị mặc định và một giá trị khác, đồng thời trả lại cho bạn giá trị mặc định đã được chuyển đổi tiềm năng của bạn.state -> action -> state