城市选择react

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import React, { useEffect, useState } from 'react';
import { Cascader } from 'antd';
import { SysCityList } from '../../services/citys';
 
interface Option {
  value?: string | number | null;
  label: React.ReactNode;
  children?: Option[];
  isLeaf?: boolean;
  loading?: boolean;
}
 
const App: React.FC = () => {
  const [options, setOptions] = useState<Option[]>([]);
  useEffect(() => {
    fetchApi([0]);
  }, []);
  const fetchApi = (val: any) => {
    const type = val?.length; // 1 - 省, 2 - 市, 3 - 区
    const id = val ? val[val.length - 1] : '';
    SysCityList({ cityId: id }).then((res: any) => {
      const data = res.data.map((i: any) => {
        const obj = {
          value: i.id,
          label: i.name,
          isLeaf: false
        };
        return obj;
      });
      if (val[0] === 0) {
        // 初次调用
        setOptions(data);
      } else {
        if (type === 1) {
          setOptions((data: any) =>
            data.map((item: any) => {
              if (item.value === id) {
                return {
                  ...item,
                  children: res.data.map((i: any) => {
                    const obj = {
                      value: i.id,
                      label: i.name,
                      isLeaf: res.data.length > 0 ? false : true
                    };
                    return obj;
                  })
                };
              } else {
                return item;
              }
            })
          );
        } else if (type === 2) {
          setOptions((data) =>
            data.map((item: any) => {
              if (item.value === val[0]) {
                return {
                  ...item,
                  children: item.children.map((son: any) => {
                    if (son.value === val[1]) {
                      return {
                        ...son,
                        children: res.data.map((i: any) => {
                          const obj = {
                            value: i.id,
                            label: i.name
                          };
                          return obj;
                        })
                      };
                    } else {
                      return son;
                    }
                  })
                };
              } else {
                return item;
              }
            })
          );
        }
      }
    });
  };
  const onChange = async (value: (string | number)[], selectedOptions: Option[]) => {
    console.log(value, selectedOptions);
    fetchApi(value);
  };
 
  return <Cascader options={options} onChange={onChange} changeOnSelect />;
};
 
export default App;

  

posted @   zjxgdq  阅读(34)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示