react使用hook封装一个search+input+checkbox组件

目录

  • react使用hook封装一个search+input+checkbox组件
    • searchPro.jsx
    • 使用组件
    • 效果

react使用hook封装一个search+input+checkbox组件

searchPro.jsx

import { Checkbox, Input } from "antd";
import React, { useEffect, useState } from "react";
import Styled from "styled-components";
const { Search } = Input;
const proDataAll = [{ name:'项目1', value:'1',check:false},{ name:'项目2', value:'2',check:false},{ name:'项目3', value:'3',check:false},{ name:'管理1', value:'11',check:false},{ name:'管理2', value:'12',check:false},{ name:'管理3', value:'13',check:false},{ name:'业务1', value:'111',check:false},{ name:'业务2', value:'业务112',check:false},{ name:'业务3', value:'113',check:false},{ name:'测试', value:'01',check:false},{ name:'测试1', value:'02',check:false},{ name:'测试2', value:'03',check:false},
]
export default function SearchPro(props) {const [proData, setProData ] = useState([])const [selectData, setSelectData ] = useState([])useEffect(()=>{setProData(proDataAll)},[])// 查询const onSearch = (value) => {// console.log('onSearch',value,"selectData",selectData);let resSelect = []if ( value ) {resSelect = proData && proData.length ? proData.filter(item => {if ( item.name.indexOf(value) > -1 || value === item.name ) {return item}}) : []} else {resSelect = [...proDataAll]}console.log('onSearch-resSelect',resSelect);setProData(resSelect)}// checkbox 勾选const onChange = ( e, item ) => {// console.log('onChange',e.target.checked,'item',item);let resSelect = [] // 设置选中的数据let resProData = [] // 设置选中的checkboxif ( e.target.checked ) {resSelect = [...selectData,{...item, check:true }];resProData = proData && proData.length ? proData.map(it => {if ( it.value === item.value ) {it.check = true}return it}) : [];} else {resSelect = selectData && selectData.length ? selectData.filter(it => {if ( !e.target.checked && it.value !== item.value ) {return it}}) : [...selectData];resProData = proData && proData.length ? proData.map(it => {if ( it.value === item.value ) {it.check = false}return it}) : [];}// console.log('onChange-resSelect',resSelect);// console.log('resProData',resProData);setSelectData(resSelect)setProData(resProData)}return (<SearchProWrap><Searchplaceholder="请输入"onSearch={onSearch}allowClearstyle={{width: 200,}}/><div className='mian'><div className='main-left'>{proData && proData.length ? proData.map(item => {return (<div className='main-left-item' key={item.value}><div>{item.name}</div><div><Checkbox onChange={(event) => onChange(event,item)} checked={item.check}>{/* { item.check ? 1 : 0 } */}</Checkbox></div></div>)}) : ''}</div><div className='main-right'>{selectData && selectData.length ? selectData.map(item=>{return (<div key={item.value}>{ item && item.name ? item.name : '' }</div>)}) : ''}</div></div></SearchProWrap>);
}const SearchProWrap = Styled.div`color: #000;.mian {display: flex;width: 650px;margin-top: 20px;.main-left {width:400px;background: #eee;margin-right: 20px;.main-left-item {display: flex;justify-content: space-between;padding: 4px 10px;margin-bottom: 10px;}}.main-right {width: 200px;background: #eee}}
`;

使用组件

import React from 'react';
import SearchPro from "./SearchPro";
export default function app(props) {return (<div><SearchPro /></div>)
}

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/99589.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LSTM基础

LSTM 视频讲得非常好 https://www.bilibili.com/video/BV1644y1W7sD/?spm_id_from333.788&vd_source3b42b36e44d271f58e90f86679d77db7门的概念 过去&#xff0c;不过去&#xff0c;过去一部分 点乘&#xff0c;0 concatenation&#xff0c;pointwise LSTM RNN 上一…

Docker 网络模式

文章目录 一、Docker 网络实现原理1.容器的端口映射 二、Docker的网络模式1.Host模式2.Container模式3.none模式4.bridge模式 三、自定义网络1、查看网络模式列表2、查看容器信息(包含配置、环境、网关、挂载、cmd等等信息&#xff09;3、指定分配容器IP地址 面试题 一、Docker…

Rasa 多轮对话机器人

Rasa 开源机器人 目录 Rasa 开源机器人 1. 学习资料 2. Rasa 安装 2.1. rasa 简介 2.2. Rasa系统结构 ​编辑 2.3. 项目的基本流程 ​编辑 2.4. Rasa安装 2.5. 组件介绍 3. Rasa NLU 3.0. NLU 推理输出格式 3.1. 训练数据 ./data/nlu.yml 数据文件 3.2. ./confi…

VB6.0 设置窗体的默认焦点位置在 TextBox 中

文章目录 VB6.0 窗体的加载过程确定指针的焦点位置添加代码效果如下未设置指定焦点已设置焦点 VB6.0 窗体的加载过程 在VB6.0中&#xff0c;窗体&#xff08;Form&#xff09;加载时会触发多个事件&#xff0c;这些事件按照特定的顺序执行。下面是窗体加载过程中常见事件的执行…

git co 命令是什么意思,用法是怎么样的

偶然看到同事使用 git co feat/xxx 来操作 git&#xff0c;以为 co 是什么 git 新命令&#xff0c;看起来很牛逼&#xff0c;所以问了下 chatgpt&#xff0c;chatgpt 的回答如下&#xff1a; git co 是 git checkout 的缩写形式&#xff0c;需要在Git的全局配置或别名配置中启用…

QT转型Visual Studio(qmake项目到cmake项目的移植)

前言 由于工作需要&#xff0c;同时也为了方便以后的集成升级&#xff0c;希望将之前用Qt creator qmake开发的项目移植到cmake项目中&#xff0c;并使用Visual Studio 进行后续开发&#xff0c;本文主要用以记录该过程中的常规步骤和遇到的特殊情况。 qmake项目 在一开始&a…

在window上安装hadoop3.3.4

暑假不知道啥原因电脑死机啦。环境需要重新配一下 首先需要配置Hadoop集群&#xff0c;但是为了代码调试方便需要先在Windows上配置Hadoop环境。 1.前期准备 首先在搭建Hadoop环境之前需要先安装JDK&#xff0c;并且配置好Java环境变量。 这里有个bug就是Java环境变量中不允许…

Lesson4-1:OpenCV图像特征提取与描述---角点特征

学习目标 理解图像的特征知道图像的角点 1 图像的特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片&#xff0c;然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序&#xff0c;那计算机就也会玩拼图游戏了。 在拼图时&#xff…

分布式 - 服务器Nginx:基础系列之Nginx简介 | 下载安装 | 启动和停止服务

文章目录 01. Nginx 简介02. 正向代理和反向代理03. Nginx 和 Apache、Tomcat 之间的不同点04. Nginx 的优点05. Nginx 常用的功能特性06. Nginx 下载07. Nginx 安装1. 源码安装前的环境准备2. Nginx 源码简单安装方式3. Nginx yum 安装方式4. Nginx 源码复杂安装方式 08. Ngin…

linux复习笔记01(小滴课堂)

1.安装CentOs7系统 点击下一步在自定义硬件中&#xff1a; 我们可以删除我们不使用的&#xff0c;后续如果需要再加上即可。 然后我们就可以开启这台虚拟机了。 我们可以进行下载cetos7. 这里选择简体中文就可以。 时间的设置。 可以开启下网络。 在这里选择设置root密码&#…

智能合约安全,著名的区块链漏洞:双花攻击

智能合约安全&#xff0c;著名的区块链漏洞&#xff1a;双花攻击 介绍: 区块链技术通过提供去中心化和透明的系统彻底改变了各个行业。但是&#xff0c;与任何技术一样&#xff0c;它也不能免受漏洞的影响。一个值得注意的漏洞是双花攻击。在本文中&#xff0c;我们将深入研究…

QTday3(QT实现文件对话框保存操作、实现键盘触发事件【WASD控制小球的移动】)

1.实现文件对话框保存操作 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }void Widget::on_fontBtn_clicked() {//调用QFo…