⊗jsrxPmRDARR 32 of 57 menu

Thêm Reducer vào Ứng dụng Redux

Trong bài học trước, chúng ta đã tạo một component UserReaction để mỗi sản phẩm cũng có các phản ứng của người dùng. Bây giờ chúng ta cần viết một reducer, sẽ xử lý bộ đếm phản ứng khi người dùng nhấp vào nút của một phản ứng cụ thể.

Hãy mở ứng dụng sản phẩm của chúng ta, và trong đó là tệp productsSlice.js chứa tất cả các reducer. Bây giờ trong thuộc tính reducers hãy tạo thêm một reducer reactionClicked (chúng ta có thể đặt nó đầu tiên - trước productAdded, mặc dù điều này không quan trọng). Như thường lệ, hãy truyền cho nó các tham số stateaction:

reactionClicked(state, action) {},

Và bây giờ bên trong các dấu ngoặc nhọn mà chúng ta đã để trống ở bước trước, hãy viết mã cho nó. Trước hết, chúng ta sẽ trích xuất id sản phẩm từ payload của đối tượng action và tên của phản ứng:

const { productId, reaction } = action.payload

Sau đó, từ state được truyền, hãy lấy sản phẩm cần thiết:

const currentProduct = state.find(product => product.id === productId)

Và nếu sản phẩm đó tồn tại, thì hãy tăng giá trị của phản ứng được truyền lên 1:

if (currentProduct) { currentProduct.reactions[reaction]++ }

Thế là xong, mã của chúng ta cho reactionClicked đã sẵn sàng:

reactionClicked(state, action) { const { productId, reaction } = action.payload const currentProduct = state.find(product => product.id === productId) if (currentProduct) { currentProduct.reactions[reaction]++ } },

Hãy ở cuối tệp, thêm xuất khẩu action creator đã tạo:

export const { reactionClicked, productAdded, productUpdated } = productsSlice.actions

Cần lưu ý hai điểm quan trọng ở đây. Như bạn nhớ từ các bài học trước - việc cập nhật trực tiếp giá trị như vậy trong mã reducer là không được phép (hãy nhìn vào dòng này: reactions[reaction]++), nhưng chúng ta có thể bỏ qua điều này vì chúng ta đang làm điều đó bên trong createSlice, sử dụng thư viện Immer. Nó sẽ đảm bảo chuyển đổi mã của chúng ta thành một bản cập nhật giá trị "an toàn". Điều này cho phép chúng ta viết những thứ phức tạp theo cách đơn giản hơn.

Điều tiếp theo cần nhớ - đối tượng action phải chứa lượng thông tin tối thiểu có thể - chỉ đủ để chỉ ra điều gì đã xảy ra. Không nên thực hiện bất kỳ phép tính nào trong đó. Tất cả các phép tính để cập nhật state nên được thực hiện trong reducer, ở đây bạn có thể viết bao nhiêu logic tùy cần thiết.

Hãy mở ứng dụng về sinh viên của bạn và trong tệp studentsSlice.js hãy thêm một reducer nữa voteClicked vào trường reducers, như đã trình bày trong bài học. Hãy viết mã cho nó. Nhiệm vụ của reducer của bạn - khi nhấp vào sẽ tăng giá trị của vote (hoặc phiếu bầu), mà đã được nhấp, cho sinh viên đó, lên 1.

Ở cuối tệp, đừng quên xuất khẩu action creator đã tạo voteClicked.

Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối