list.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { queryFakeList } from '../services/api';
  2. export default {
  3. namespace: 'list',
  4. state: {
  5. list: [],
  6. loading: false,
  7. },
  8. effects: {
  9. *fetch({ payload }, { call, put }) {
  10. yield put({
  11. type: 'changeLoading',
  12. payload: true,
  13. });
  14. const response = yield call(queryFakeList, payload);
  15. yield put({
  16. type: 'queryList',
  17. payload: Array.isArray(response) ? response : [],
  18. });
  19. yield put({
  20. type: 'changeLoading',
  21. payload: false,
  22. });
  23. },
  24. *appendFetch({ payload }, { call, put }) {
  25. yield put({
  26. type: 'changeLoading',
  27. payload: true,
  28. });
  29. const response = yield call(queryFakeList, payload);
  30. yield put({
  31. type: 'appendList',
  32. payload: Array.isArray(response) ? response : [],
  33. });
  34. yield put({
  35. type: 'changeLoading',
  36. payload: false,
  37. });
  38. },
  39. },
  40. reducers: {
  41. queryList(state, action) {
  42. return {
  43. ...state,
  44. list: action.payload,
  45. };
  46. },
  47. appendList(state, action) {
  48. return {
  49. ...state,
  50. list: state.list.concat(action.payload),
  51. };
  52. },
  53. changeLoading(state, action) {
  54. return {
  55. ...state,
  56. loading: action.payload,
  57. };
  58. },
  59. },
  60. };