Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@uiw/react-search-tree

Package Overview
Dependencies
Maintainers
1
Versions
82
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@uiw/react-search-tree

TreeChecked component

  • 4.13.12
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
123
decreased by-2.38%
Maintainers
1
Weekly downloads
 
Created
Source

SearchTree 带搜索的Tree选择控件

Open in unpkg NPM Downloads npm version

使用树选择控件可以完整展现其中的层级关系,并具有选中状态。新组件 v4.11.7+ 支持。

import { SearchTree } from 'uiw';
// or
import SearchTree from '@uiw/react-search-tree';

基础实例

import React, { useState, useEffect, useRef } from 'react';
import ReactDOM from 'react-dom';
import {  SearchTree } from 'uiw';

const data = [
  {
    label: '上海市',
    key: 1,
    children:[
      { label: '黄浦区', key: 2 },
      { label: '卢湾区', key: 3 },
      {
        label: '徐汇区',
        key: 4,
        children:[
          { label: '半淞园路街道', key: 6 },
          { label: '南京东路街道', key: 7 },
          { label: '外滩街道', key: 8 },
        ]
      },
    ]
  },
  {
    label: '北京市',
    key: 9,
    children:[
      { label: '东城区', key: 10 },
      { label: '西城区', key: 11 },
      {
        label: '崇文区',
        key: 12,
        children:[
          { label: '东花市街道', key: 13 },
          { label: '体育馆路街道', key: 14 },
          { label: '前门街道', key: 15 },
        ]
      },
    ]
  },
  { label: '澳门', key: 16 },
];

const datas =[
  { label: '上海市',  key: 0 },
  {
    label: '北京市',  key: 1,
    children:[
      { label: '东城区', key: 10 },
   ]
  },
  { label: '成都市',  key: 2 },
]

const Demo = () => {

const [value,valueSet]=useState([{ label: '黄浦区', key: 12 }])
const [values,valuesSet]=useState([{ label: '北京市', key: 1 }])
const [valueSinge,valueSingeSet]=useState([{ label: '上海市', key: '1-0-0' }])

const onChange=(selectd, selectedAll,  isChecked)=>{
  console.log('SearchTree-> onChange',selectedAll, selectd, isChecked)
  valueSet(selectedAll)
}

const onChanges=(selectd, selectedAll,  isChecked)=>{
  console.log('SearchTree-> onChange',selectedAll, selectd, isChecked)
  valuesSet(selectedAll)
}

const onChangeSinge=(selectd, selectedAll,  isChecked)=>{
  console.log('SearchTree-> onChange', selectd, selectedAll, isChecked)
  valueSingeSet(selectedAll)
}

 return (
   <>
    <Row>
      <Col >
        <label>多选</label>
        <SearchTree
          style={{ width:300 }}
          allowClear={true}
          onSearch={(searchValue)=>console.log('multiple',searchValue)}
          onChange={onChange}
          value={value}
          options={data}
          placeholder="请输入选择"
        />
      </Col>
    </Row>
    <label>单选</label>
    <Row>
        <SearchTree
          style={{width:300}}
          loading={true}
          multiple={false}
          allowClear={true}
          onSearch={(searchValue)=>console.log('singe',searchValue)}
          onChange={onChanges}
          value={values}
          options={datas}
          placeholder="请输入选择"
        />
        <Col style={{marginLeft:20}}>
        <SearchTree
          style={{width:300}}
          multiple={false}
          allowClear={true}
          onSearch={(searchValue)=>console.log('singe',searchValue)}
          onChange={onChangeSinge}
          value={valueSinge}
          options={data}
          placeholder="请输入选择"
        />
        </Col>
    </Row>
  </>
  )
}
ReactDOM.render(<Demo />, _mount_);

自定义空选项

import React, { useState, useEffect, useRef } from 'react';
import {  SearchTree } from 'uiw';

const Demo = () => {
  return(
    <>
      <SearchTree
        style={{ width:200 }}
        placeholder="请输入选择"
      />
      <SearchTree
        style={{ width:200,marginTop:5 }}
        emptyOption={<span>暂无数据..</span>}
        placeholder="请输入选择"
      />
    </>
  )
}

ReactDOM.render(<Demo />, _mount_);

Form中使用

import React, { useState, useEffect, useRef } from 'react';
import ReactDOM from 'react-dom';
import {  Form, Button, SearchTree, Card, Row, Col } from 'uiw';;


const Demo = () => {
const form=useRef()

  const data = [
    {
      label: '上海市',
      key: '1-0-0',
      children:[
        { label: '黄浦区', key: '1-0-1' },
        { label: '卢湾区', key: '1-0-2' },
        {
          label: '徐汇区',
          key: '1-0-3',
          children:[
            { label: '半淞园路街道', key: '1-1-0' },
            { label: '南京东路街道', key: '1-2-0' },
            { label: '外滩街道', key: '1-3-0' },
          ]
        },
      ]
    },
    {
      label: '北京市',
      key: '2-0-0',
      children:[
        { label: '东城区', key: '2-1-0' },
        { label: '西城区', key: '2-2-0' },
        {
          label: '崇文区',
          key: '2-3-0',
          children:[
            { label: '东花市街道', key: '2-3-1' },
            { label: '体育馆路街道', key: '2-3-2' },
            { label: '前门街道', key: '2-3-3' },
          ]
        },
      ]
    },
    { label: '澳门', key: '3' },
  ];

  const setValue=()=>{
    form.current.setFields({
      searchTree: [{ label: '东城区', key: '2-1-0' }, { label: '外滩街道', key: '1-3-0' }],
      searchTreeSinge:[{ label: '前门街道', key: '2-3-3' }]
       })
  }

  const resetValue=()=>{
    form.current.resetForm()
  }

  return (
    <div>
      <Form
        ref={form}
        onSubmitError={(error) => {
          if (error.filed) {
            return { ...error.filed };
          }
          return null;
        }}
        onSubmit={({initial, current}) => {
          const errorObj = {};
          if (!current.searchTree) {
            errorObj.searchTree = '默认需要选择内容,选择入内容';
          }
          if(Object.keys(errorObj).length > 0) {
            const err = new Error();
            err.filed = errorObj;
            Notify.error({ title: '提交失败!', description: '请确认提交表单是否正确!' });
            throw err;
          }
          Notify.success({
            title: '提交成功!',
            description: `表单提交成功,选择值为:${current.selectField},将自动填充初始化值!`,
          });
        }}
        fields={{
          searchTree: {
            initialValue:[ { label: '黄浦区', key: '1-0-1' }, { label: '卢湾区', key: '1-0-2' }],
            children: (
                <SearchTree
                  allowClear={true}
                  onSearch={(searchValue)=>console.log('SearchTree-> SearchTreeOption',searchValue)}
                  onChange={(selectd, selectedAll,  isChecked)=>console.log('SearchTree-> onChange', selectd, selectedAll, isChecked)}
                  options={data}
                  placeholder="请输入选择"
                />
            )
          },
          searchTreeSinge: {
            initialValue:[{ label: '东花市街道', key: '2-3-1' }],
            children: (
                <SearchTree
                  multiple={false}
                  allowClear={true}
                  onSearch={(searchValue)=>console.log('SearchTree-> SearchTreeOption',searchValue)}
                  onChange={(selectd, selectedAll,  isChecked)=>console.log('SearchTree-> onChange', selectd, selectedAll, isChecked)}
                  options={data}
                  placeholder="请输入选择"
                />
            )
          },
        }}
      >
        {({ fields, state, canSubmit }) => {
          return (
            <div>
              <Row style={{display:'flex',flexDirection:'column'}}>
                <div>多选</div>
                <Col >{fields.searchTree}</Col>
              </Row>
              <Row style={{display:'flex',flexDirection:'column'}}>
                <label>单选</label>
                <Col >{fields.searchTreeSinge}</Col>
              </Row>
              <Row>
                <Col fixed>
                  <Button disabled={!canSubmit()} type="primary" htmlType="submit">提交</Button>
                  <Button onClick={setValue} type="primary" >setValue</Button>
                  <Button onClick={resetValue} type="primary" >重置</Button>
                </Col>
              </Row>
              <Row>
                <Col>
                  <pre style={{ padding: 10, marginTop: 10 }}>
                    {JSON.stringify(state.current, null, 2)}
                  </pre>
                </Col>
              </Row>
            </div>
          )
        }}
      </Form>
    </div>
  );
}
ReactDOM.render(<Demo />, _mount_);

Props

参数说明类型默认值
allowClear支持清除Booleanfalse
disabled禁用选择器Booleanfalse
multiple是否可以多选Booleantrue
value指定当前选中的条目[{label:string, key:string}]-
options下拉数据源,可参考Tree下拉数据源[{label:string, key:string, children: [{label:string, key:string}] }]-
placeholder选择框默认文字String-
size选择框尺寸Enum{large, default, small }default
onChange选中 option,或 input 的 value,调用此函数function(selectd, selectdAll, isChecked)=>void-
onSearch文本框值变化时回调function(searchValue)-
loading加载中状态Booleanfalse
emptyOption自定义下拉选项为空时显示内容React.ReactNodeEmpty

Keywords

FAQs

Package last updated on 14 Mar 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc