赞
踩
一、自己写的组件
效果图
完整代码
App.js
- import React, { Component } from "react";
- import { Input, Checkbox } from 'antd';
- import { CloseOutlined } from '@ant-design/icons';
- import _ from "lodash";
- import "antd/dist/antd.css";
- import "./App.css"
- const selectData = ["test1","test2","test3","test4"];
- class App extends Component {
- constructor(props) {
- super(props);
- this.state = {
- selectValues: ["test1","test2","test3","test4"],
- inputValue: "",
- showCheckGroup: false,
- indeterminate: true,
- checkAll: true
- };
- this.deleteSelectSiteId = this.deleteSelectSiteId.bind(this);
- this.onSelectChange = this.onSelectChange.bind(this);
- }
- componentDidMount(){
- this.setState({indeterminate:selectData.length===this.state.selectValues.length?false:true,
- checkAll:!_.isEmpty(selectData)&!_.isEmpty(this.state.selectValues)&selectData.length===this.state.selectValues.length?true:false})
- }
- onSelectChange(value) {
- console.log("value===value.length",value,value.length);
- console.log("this.selectData",selectData)
- this.setState({
- selectValues: value,
- indeterminate: !!value.length && value.length < selectData.length,
- checkAll: value.length === selectData.length,
- });
- }
- handleInputChange(data) {
- console.log("data", data)
- this.setState({ inputValue: data })
- }
- deleteSelectSiteId(key) {
- const newSelectValues = this.state.selectValues;
- newSelectValues.splice(key, 1);
- this.setState({ selectValues: newSelectValues, inputValue: "" });
- }
- renderValueItem({ value, key }) {
- return (
- <div
- key={key}
- className="selectBox"
- >
- <span className="selectValue">{value}</span>{' '}
- <CloseOutlined
- className="CloseOutlined"
- onClick={() => this.deleteSelectSiteId(key)}
- />
- </div>
- );
- }
- onCheckAllChange = e => {
- console.log("e.target.checked",e.target.checked)
- this.setState({
- inputValue: "",
- indeterminate: false,
- checkAll: e.target.checked,
- });
- if (e.target.checked) {
- this.setState({ selectValues: selectData });
- }
- else {
- this.setState({ selectValues: [""] });
- }
- };
- render() {
- return (
- <div className="selectContainer"
- onClick={() => { this.setState({ showCheckGroup: true }) }}
- >
- <div className="selectValuesBox">
- {
- this.state.selectValues.length > 0 ?
- this.state.selectValues.map((value, key) => {
- return this.renderValueItem({ value, key });
- })
- : <div className="blanck_SelectBox"></div>
- }
- </div>
- {
- this.state.showCheckGroup &&
- <div className="CheckboxGroupBox"
- onMouseLeave={(e) => { this.setState({ showCheckGroup: false }) }}
- >
- <Input className="selectInputSearch" placeholder="Type to Search" onChange={(e, data) => { this.handleInputChange(e.target.value) }} />
- <Checkbox
- indeterminate={this.state.indeterminate}
- onChange={this.onCheckAllChange}
- checked={this.state.checkAll}
- style={{ marginLeft: 8 }}
- >
- All
- </Checkbox>
- <br />
- <Checkbox.Group
- className="CheckboxGroup"
- onChange={this.onSelectChange}
- value={this.state.selectValues}
- >
- {selectData.map((sel, i) => {
- return (
- <Checkbox className="Checkbox" value={sel} key={"select" + i} style={{
- display: _.isEmpty(this.state.inputValue) ? "block"
- : sel.indexOf(this.state.inputValue) === -1 ? "none"
- : "block"
- }
- }>
- {sel}
- </Checkbox>
- );
- })}
- </Checkbox.Group>
- </div>
- }
- </div>
- );
- }
- }
- export default App;

App.css
- .selectContainer{position: relative;border: 1px solid #d9d9d9;border-radius: 4px;height: 32px;padding: 0 15px 0 10px;display: inline-block;}
- .selectBox{ background-color: #fafafa;padding: 0 10px 0 10px;border: 1px solid #e8e8e8;
- border-radius: 2px;display: inline-block;margin-left: 5px}
- .CloseOutlined{color: rgba(0, 0, 0, 0.45); font-weight: bold; font-size: 12px;}
- .selectValue{font-size: 14px; color: rgba(0, 0, 0, 0.65);
- margin-right: 4px;
- height: auto;}
- .selectValuesBox{margin-top: 3px;}
- .Checkbox{margin-left: 8px;}
- .CheckboxGroupBox{margin-top: 4px;margin-left: -12px;background-color: #fff;z-index: 999;
- position: absolute;border: 1px solid #d9d9d9;top: 100%;border-radius: 4px;width:240px;
- }
- .selectInputSearch{width: 214px;margin-top: 20px;margin-bottom: 10px;margin-left: 8px;border-radius: 4px;}
- .blanck_SelectBox{display: inline-block;margin-left: 5px;padding: 0 10px 0 10px;}
二、网上找到了一个比较简洁好用的组件
App.js
- import React, { Component } from "react";
- import MultiSelect from "react-multi-select-component";
- import "./App.css"
- const options = [
- { label: "Grapes 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/791930推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。