2021 第51週 學習記錄:實作複數條件搜尋

總結

multiple condition search

本週筆記內容:使用物件結構來處理有複數種搜尋條件,而且須允許 debounce 的情境 完整程式碼:https://github.com/tzynwang/react-mui/tree/feature/object-state

情境描述

實作筆記

保存搜尋條件的資料結構

const TABS: Gender[] = ['female', 'male'];
const DEFAULT_PAGE = 5;
const DATA_PER_PAGE = [5, 7, 10];
const CONDITION: QueryCondition = {
  global: {
    results: DEFAULT_PAGE,
    gender: TABS[0],
    nat: '',
  },
  local: {
    nat: '',
  },
};

debounce 化

const handleSearch = () => {
  setQueryCondition((prev) => ({
    ...prev,
    global: {
      results: prev.global.results,
      gender: prev.global.gender,
      nat: queryCondition.local.nat,
    },
  }));
};
const debouncedHandleSearch = debounce(handleSearch, 400);

打 API 的時間點

useEffect(() => {
  async function fetchUser() {
    const params = { ...queryCondition.global };
    const res = await axios.get<undefined, AxiosResponse<FetchUserListRes>>(
      'https://randomuser.me/api/',
      { params }
    );
    setUserList(res.data.results);
  }
  fetchUser();
}, [queryCondition.global]);

參考文件