Sfoglia il codice sorgente

fix: 地区级联请求市级数据时,省级数据未初始化

lanjianrong 4 anni fa
parent
commit
347cab2087
2 ha cambiato i file con 16 aggiunte e 6 eliminazioni
  1. 3 2
      src/components/LazyCascader/LazyCascader.jsx
  2. 13 4
      src/models/district.js

+ 3 - 2
src/components/LazyCascader/LazyCascader.jsx

@@ -125,7 +125,8 @@ const CLazyCascader = props => {
                       item.value.map(v => v.id),
                       item.value
                     )
-                  }>
+                  }
+                >
                   <Tag>{item.name}</Tag>
                 </div>
               ))}
@@ -139,7 +140,7 @@ const CLazyCascader = props => {
   const handleOnPopupVisibleChange = e => {
     setVisible(e)
     // 检测value是为了防止在Form里面的自定义级联组件失效
-    // TODOS 自定义FormItem组件需要接受value以及onChange事件
+    // TODO: 自定义FormItem组件需要接受value以及onChange事件
     if (value && !e && cValue === defaultValue) {
       triggerChange(null)
     }

+ 13 - 4
src/models/district.js

@@ -20,14 +20,23 @@ export default {
         })
       }
     },
-    *fetchWithValues({ payload = [] }, { call, put, select }) {
-      const provinceId = payload[0] //
-      const cityId = payload[1]
+    *fetchWithValues({ payload = [] }, { call, put, select, take }) {
+      const provinceId = payload[0] // 省id
+      const cityId = payload[1] // 市id
+
+      const originalData = yield select(state => state.district.data)
+
+      // TODO: 省级数据初始化
+      if (!originalData?.length) {
+        yield put({ type: 'fetch' })
+        yield take('fetch/@@end') // 直到监听到b结束才继续执行
+      }
+
       const currProvince = yield select(state =>
         state.district.data.find(item => item.id === provinceId)
       )
       // 判断市的数据是否拉取过了
-      if (currProvince && (!currProvince.children || !currProvince.children.length)) {
+      if (currProvince && !currProvince.children?.length) {
         const { code = -1, data = [] } = yield call(queryDistrict, { parentId: provinceId })
         if (code === consts.RET_CODE.SUCCESS) {
           const response = yield call(queryDistrict, { parentId: cityId })