Nếu bạn xem 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 như một luồng, điều đó có thể có ý nghĩa hơn.
Hãy ví dụ contrived này:
['apple', 'banana', 'cherry'].reduce((acc, item) => acc + item.length, 0)
Đối số đầu tiên là một chức năng của mẫu (Int, String) => Int
. Cùng với giá trị ban đầu, bạn vượt qua reduce
những gì có thể được gọi là "chức năng giảm tốc" và bạn nhận được kết quả xử lý chuỗi các mục. Vì vậy, bạn có thể nói, chức năng giảm tốc 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 reducer lấy đầu ra trước đó và giá trị tiếp theo, và nó tính toán đầu ra tiếp theo.
Điều này tương tự với trình giảm tốc Redux làm gì: nó lấy trạng thái trước đó và hành động hiện tại, và nó tính 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 ý nghĩa á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 đầu vào và đầu ra. Trong thực tế, Redux reducers thường trực giao, theo nghĩa là đối với một hành động nhất định, chúng không làm thay đổi cùng thuộc tính, giúp dễ dàng phân chia trách nhiệm của chúng và tổng hợp đầu ra với combineReducers
.
Chúng là các trình giảm tốc chính xác vì chúng hoạt động giống như hàm bạn chuyển sang 'reduce', có quyền truy cập vào giá trị mặc định và giá trị khác và cung cấp cho bạn giá trị mặc định có khả năng được chuyển đổi.'state -> action -> state' – azium
hoa hồng bằng bất kỳ tên nào khác ... có lẽ là tiếp thị; map/reduce là một từ thông dụng bây giờ ... – dandavis