# react-cascader-popover **Repository Path**: zhouruixin_0/react-cascader-popover ## Basic Information - **Project Name**: react-cascader-popover - **Description**: react级联选择器/支持多选/单选 - **Primary Language**: JavaScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-01-19 - **Last Updated**: 2024-03-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: React ## README # react-cascader-popover react 级联选择器/支持多选/单选 src/Type 有完整演示 ## Install ```bash npm i react-cascader-popover 或者 yarn add react-cascader-popover ``` ## 单选 ![](https://gitee.com/zhouruixin_0/react-cascader-popover/raw/master/public/1.png) ```js import { useRef, useState } from "react"; import { province } from "../data"; import { Cascader, CascaderOption, CascaderRefProps, } from "react-cascader-popover"; function Default() { const [anchorEl, setAnchorEl] = useState(null); const [valueAllPath, setValueAllPath] = useState([]); const [value, setValue] = useState("120103"); const cascaderRef = useRef(null); // 点击展开 const handleClick = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; // change 事件 const handleChange = ( value: CascaderOption | null, valueAll: CascaderOption[] ) => { setValue(value ? value.value : ""); setValueAllPath(valueAll); }; // 清空选中 const handleClear = () => { setValueAllPath([]); // 两种都可以清空 // setValue(""); cascaderRef.current?.clearValue(); }; // 设置选中 const handleSet = () => { setValue("11010333555"); }; const open = Boolean(anchorEl); return ( <>
{valueAllPath.length ? (
{valueAllPath.map((e) => e.label).join(" - ")}
) : (
请选择
)}
setAnchorEl(null)} onChange={handleChange} /> ); } export default Default; ``` ## 多选 ![](https://gitee.com/zhouruixin_0/react-cascader-popover/raw/master/public/2.png) ```js import { useRef, useState } from "react"; import { Cascader, CascaderOption, CascaderRefProps, } from "react-cascader-popover"; import { province } from "../data"; function Multiple() { const value = "130102"; const [anchorEl, setAnchorEl] = useState(null); const [valueAll, setValueAll] = useState([]); const cascaderRef = useRef(null); const handleClick = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleChange = ( _: CascaderOption | null, valueAll: CascaderOption[] ) => { console.log(valueAll); setValueAll(valueAll); }; const handleClear = () => { // cascaderRef.current?.setValue([]); cascaderRef.current?.clearValue(); }; const handleSetValue = () => { const data = [ { value: "120101", label: "和平区", }, { value: "120102", label: "河东区", }, ]; cascaderRef.current?.setValue(data.map((e) => e.value)); }; const open = Boolean(anchorEl); return ( <>

多选

{valueAll.length ? ( <>
当前选中【{valueAll.map((e) => JSON.stringify(e) + ",")}】
) : ( )}
{valueAll.length ? (
{valueAll.map((e) => e.label).join(" , ")}
) : (
请选择
)}
setAnchorEl(null)} onChange={handleChange} /> ); } export default Multiple; ``` ## API ### props
参数 类型 默认值 描述
value string 选中的值
options CascaderOption[] [] 数据
open boolean false 是否弹出选择器
anchorEl HTMLDivElement | null null HTMLDivElement元素 用于展示窗口的位置
multiple boolean false 是否开启多选
search boolean false 是否开启搜索
searchPlaceholder string 请输入关键词 搜索框提示语
onChange (value: CascaderOption | null, valueAll: CascaderOption[]) => void 点击后的事件
onClose () => void 隐藏选择器事件
ref CascaderRefProps
setValue: (value: string[]) => void;
clearValue: () => void;
用户多选时使用
### option
参数 类型 默认值 描述
label string 展示的文字
value string 对应的value
children Array children
## 更新说明 1.0.6 更新项目 1.0.7 多选时展开列表默认展示第一个数据 1.1.0 增加输入框筛选 修复 onChange 触发问题