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

这篇具有很好参考价值的文章主要介绍了react使用hook封装一个search+input+checkbox组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 = [] // 设置选中的checkbox
    if ( 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>
      <Search
        placeholder="请输入"
        onSearch={onSearch}
        allowClear
        style={{
          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>
    )
}

效果

react使用hook封装一个search+input+checkbox组件,react组件,react.js,javascript,前端文章来源地址https://www.toymoban.com/news/detail-700080.html

到了这里,关于react使用hook封装一个search+input+checkbox组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React 通过一个输入内容加入列表案例熟悉 Hook 基本使用

    我们创建一个react项目 在src下创建components文件夹 在下面创建一个index.jsx index.jsx 参考代码如下 首先 我们通过一个比较典型的方法定义了一个用于声明表单元素绑定响应式数据的的函数useInputValue 接收一个参数 用于做响应式数据的默认值 然后暴露他的value 同时 绑定了一个o

    2024年02月09日
    浏览(35)
  • React Hook入门小案例 在函数式组件中使用state响应式数据

    Hook是react 16.8 新增的特性 是希望在不编写 class的情况下 去操作state和其他react特性 Hook的话 就不建议大家使用class的形式了 当然也可以用 这个他只是不推荐 我们还是先创建一个普通的react项目 我们之前写一个react组件可以这样写 简单说 就是声明一个类对象 然后在里面 写组

    2024年02月09日
    浏览(42)
  • 【React hooks】useDebounce的封装

    自定义钩子 useDebounce 返回一个debounceValue,这个值会在delay后改变,这样用到它的地方的依赖,也会有这样的效果 param变了,debouncedParam 不会立即改变,这样就达到了防抖的效果 useEffect里的函数每次执行之前,都会清除掉上一次的effect,即执行上一次effect里return的函数 具体实

    2024年02月16日
    浏览(28)
  • 使用taro或react框架的,针对微信小程序隐私协议的组件封装,网上找了很久都没有相关模版,只有自己写了一个,现分享给有困难的同伴

    注意:我是使用hooks的,其他可以参考封装思路大同小异的 首先写一个PrivacyAgreement.js文件 样式文件index.scss如下 在需要用到隐私协议的组件或者api的页面里面引用

    2024年02月05日
    浏览(38)
  • 前端实现简单的sse封装(React hook Vue3)

    所谓的SSE(Sever-Sent Event),就是浏览器向服务器发送了一个HTTP请求,保持长连接,服务器不断单向地向浏览器推送“信息”,这么做是为了节省网络资源,不用一直发请求,建立新连接。 优点:SSE和WebSocket相比,最大的优势是便利,服务端不需要第三方组件,开发难度低,SSE和

    2024年02月09日
    浏览(33)
  • React---函数组件的常用hook

    2024年01月19日
    浏览(31)
  • 前端开发笔记 | React Hooks子组件和父组件交互

    前端开发框架目前比较常用的就是react、vue等,其中使用React Hooks 带来了不少的好处,今天来聊聊React Hooks开发方式下,子组件和父组件的交互。 子组件定义 父组件调用子组件 父组件定义 子组件中刷新父组件按钮文案 实际效果:点击子组件中“改变父组件按钮”,父组件中

    2024年02月11日
    浏览(68)
  • React类组件和函数组件对比-Hooks的介绍及初体验

    Hooks出现的原因 Hook 是 React 16.8 的新增特性,它可以让我们在不编写class的情况下, 使用state以及其他的React特性( 比如生命周期 ) 。 我们先来思考一下class组件相对于函数式组件有什么优势?比较常见的是下面这些优势 : class组件可以定义自己的state,用来保存组件自己内部的状

    2024年01月16日
    浏览(32)
  • 基于element UI input组件自行封装“数字区间”输入框组件

    在开发时遇到一个 数字区间 输入框的需求,如下图: 项目使用的是vue,组件库用的是element UI,但是element UI并没有提供数字区间组件,只提供了InputNumber 计数器输入框,如果用两个计数器输入框进行拼接也能满足需求,但是样式调试起来太过于复杂且不够灵活,不能令人满

    2024年02月11日
    浏览(32)
  • 基于elementUI封装的带复选框el-checkbox的下拉多选el-select组件

    组件:MultipleSelect.vue 使用:index.vue 多选框多选不换行

    2024年01月22日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包