Lấy dữ liệu người bán trong Redux

Hãy khởi chạy ứng dụng sản phẩm của chúng ta. Chúng ta thấy rằng trong các thẻ sản phẩm, người bán không được hiển thị. Hãy lấy dữ liệu từ máy chủ và hiển thị thông tin này. Để làm điều này, chúng ta sẽ phải thực hiện một chuỗi hành động đã quen thuộc.

Đầu tiên, hãy mở tệp server.js. Tìm mảng handlers và thêm một xử lý GET request nữa vào đó (sau xử lý GET cho sản phẩm). Như bạn thấy, nó gần như giống hệt nhau:

api/server.jshttp.get('/fakeServer/sellers', async () => {
  await delay(ARTIFICIAL_DELAY_MS)
  return HttpResponse.json(db.seller.getAll())
}),

Chúng ta đã xử lý yêu cầu trên máy chủ. Bước tiếp theo, trong tệp sellersSlice.js, chúng ta cần viết thunk để lấy dữ liệu từ máy chủ. Để làm điều này, hãy nhập client và createAsyncThunk vào đó:

sellers/sellersSlice.jsimport { createSlice, createAsyncThunk } from '@reduxjs/toolkit'
import { client } from '../../api/client'

Bây giờ chúng ta sẽ lấy dữ liệu người bán từ máy chủ, vì vậy hãy xóa chúng khỏi initialState, chỉ để lại một cặp ngoặc trống:

sellers/sellersSlice.jsconst initialState = []

Và sau đó, trước hàm sellersSlice, hãy tạo thunk fetchSellers của chúng ta. Chúng ta sẽ truyền đường dẫn mà chúng ta đã chỉ định trên máy chủ cho client:

sellers/sellersSlice.jsexport const fetchSellers = createAsyncThunk(
  'sellers/fetchSellers',
  async () => {
    const response = await client.get('/fakeServer/sellers')
    return response.data
  }
)

Chúng ta chỉ còn phải tạo một reducer bổ sung cho sellersSlice. Ở đây chúng ta sẽ chỉ giới hạn ở việc xử lý yêu cầu thành công. Tất cả các action được tạo bởi fetchSellers sẽ giống hệt với các action của fetchProducts:

sellers/sellersSlice.jsconst sellersSlice = createSlice({
  name: 'sellers',
  initialState,
  reducers: {},
  extraReducers(builder) {
    builder.addCase(fetchSellers.fulfilled, (state, action) => {
      return action.payload
    })
  },
})

Nhắc lại rằng lần trước khi lấy sản phẩm, chúng ta đã thay đổi giá trị hiện tại của state. Ở đây chúng ta sử dụng một cách hơi khác và chỉ đơn giản trả về một giá trị mới, trong createSlice cũng có thể làm như vậy. Bằng cách đó, chúng ta đạt được hai mục tiêu. Thứ nhất, chúng ta có được dữ liệu, và thứ hai, bây giờ chúng ta có đảm bảo rằng trong danh sách người bán sẽ không có thêm bất cứ thứ gì khác, bởi vì chúng ta đã hoàn toàn ghi đè slice bằng giá trị action.payload.

Задание 1

Hãy mở ứng dụng về sinh viên của bạn. Mở tệp server.js trong đó, thêm một trình xử lý nữa cho GET request của giáo viên vào mảng handlers.

Задание 2

Và bây giờ hãy mở tệp teachersSlice.js. Làm cho initialState trở thành một mảng trống, như đã được hiển thị trong bài học. Trước hàm studentsSlice, hãy viết thunk fetchTeachers.

Задание 3

Trong hàm createSlice, hãy viết bổ sung extra reducer, chỉ giới hạn ở việc xử lý yêu cầu thành công.