react--自定义列表字段

这篇具有很好参考价值的文章主要介绍了react--自定义列表字段。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

支持react表格自由选择展示的字段,支持全选

1、组件代码如下 
import type { ModalProps } from "antd";
import type { CheckboxChangeEvent } from "antd/lib/checkbox";
import type { CheckboxValueType } from "antd/lib/checkbox/Group";
import type { FC, ReactNode } from "react";

import { Alert, Checkbox, Modal } from "antd";
import { useEffect, useState } from "react";

import style from "./style.module.less";

/**
 * @description 自定义table column列选择
 * @param title {string|ReactNode} modal title
 * @param alert {string|ReactNode} alert message
 * @param options {Array<CheckboxOptionType|string>} 可选字段
 * @param value {Array<string>} 已选中的值
 * @param onOk {(checked) => void} 确认回调
 * @param className {string} class
 * @param open {boolean} 是否显示modal
 * @param props {ModalType} modal 属性值
 * @param defaultCheckAll {boolean} 是否含有全选
 * @return {ReactNode} Modal
 */

interface CustomColumnsProps extends ModalProps {
  alert?: string | ReactNode;
  options: any[];
  value: CheckboxValueType[];
  defaultCheckAll?: boolean;
  handleOk: (value: CheckboxValueType[]) => void;
}

const CustomColumns: FC<CustomColumnsProps> = ({
  title = "自定义列表字段",
  alert,
  options = [],
  value = [],
  className,
  open,
  handleOk,
  ...props
}) => {
  const [checked, setChecked] = useState<CheckboxValueType[]>(value);
  const [indeterminate, setIndeterminate] = useState(true);
  const [checkAll, setCheckAll] = useState(false);

  const onCheckAllChange = (e: CheckboxChangeEvent) => {
    const result = e.target?.checked;
    const selectValue = options?.map((item) => item.value);
    setIndeterminate(false);
    setCheckAll(result);
    setChecked(
      result
        ? (selectValue as string[])
        : (options?.filter((item) => item?.disabled)?.map((item) => item.value) as string[]),
    );
  };

  const onChange = (e: CheckboxValueType[]) => {
    setChecked(e as string[]);
    if (props?.defaultCheckAll) {
      setIndeterminate(!!e?.length && e?.length < options?.length);
    }
  };
  useEffect(() => {
    if (!checked?.length) {
      setCheckAll(false);
    } else if (checked?.length === options?.length) {
      setCheckAll(true);
    }
  }, [checked]);

  useEffect(() => {
    if (open) {
      setChecked(value);
    }
  }, [open, value]);

  return (
    <Modal
      width={600}
      title={title}
      className={`${className} ${style.modal}`}
      maskClosable={false}
      open={open}
      {...props}
      onOk={() => {
        handleOk && handleOk(checked);
      }}
    >
      <Alert
        type="info"
        message={
          alert || `请选择您想显示的列表表头信息,最多可勾选${options.length}个字段,已勾选${checked.length}个字段`
        }
      />
      {props?.defaultCheckAll && (
        <Checkbox
          indeterminate={indeterminate}
          onChange={onCheckAllChange}
          checked={checkAll}
          style={{ margin: "16px 0 8px 0" }}
        >
          选择所有的字段
        </Checkbox>
      )}
      <Checkbox.Group options={options} value={checked} onChange={onChange} />
    </Modal>
  );
};

export default CustomColumns;
2、组件使用 

页面导入 import CustomColumns from "@/components/CustomColumns";
设置默认状态:文章来源地址https://www.toymoban.com/news/detail-773644.html


const preset = useStore("presetStore");
const [customColumnsVisible, setCustomColumnsVisible] = useState(false);
  const [columnsChecked, setColumnsChecked] = useState<CheckboxValueType[]>(
    preset?.customList?.order || [
      "orderNo",
      "account",
      "statusDesc",
      "amount",
      "paid",
      "contractPrice",
      "createdAt",
      "station",
      "chargingMode",
    ],
  );
 3、定义tableColumns
4、在table组件中过滤出操作选项和默认项
5、组件调用
<CustomColumns
     options={tableColumns
       .map(({ dataIndex, title, disabled }) => ({
        value: dataIndex,
        label: title,
        disabled,
       })).filter(({ value }) => value !== "action")}
        value={columnsChecked}
        defaultCheckAll
        open={customColumnsVisible}
        handleOk={(value) => {
          setColumnsChecked(value);
          setCustomColumnsVisible(false);
          preset.updateCustomList("order", value);
        }}
        onCancel={() => setCustomColumnsVisible(false)}
      />

到了这里,关于react--自定义列表字段的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • JavaScript 框架比较:Angular、React、Vue.js

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。这些首字母相同的选项各自代表不同的技术加工具组合。为了在这些技术栈中做出明智选择,让我们先从核心组件聊起,再对各自前端框架(React、Angular 和 Vue)进行简化比

    2024年01月20日
    浏览(56)
  • 【React | 前端】在React的前端页面中,判断某个变量值是否被定义?根据是否定义显示不同的内容?

    在React的前端页面中,判断某个变量值是否被定义?根据是否定义显示不同的内容? 假如,现在有一个需求是设计一个新功能,新功能中要求新增一个之前没有的变量,假设是计算某一个数组的长度或者统计某个事情的总数。 场景是历史任务中并没有计算该数值,新的任务需

    2024年02月13日
    浏览(49)
  • 从javascript到vue再到react:前端开发框架的演变

    目录 JavaScript: 动态语言的基础 JavaScript:Web开发的起点 Vue.js: 渐进式框架的兴起 Vue.js:简洁、高效的前端框架 React.js: 声明式UI的革新 React.js:强大、灵活的前端框架 演变之路与未来展望 演变过程 当提到前端开发中的框架时,JavaScript、Vue.js和React.js是三个最常见的名词。它

    2024年02月07日
    浏览(51)
  • 前端list列表自定义图标并设置大小

    一、前端list列表基础知识回顾 前端公有两种列表,一种是有序列表(ol),一种是无序列表(ul),它们的子元素都是(li)。 1.1 有序列表(ol) 有序列表的子元素(li)的样式: 代码示例: 1.2 无序列表(ul) 无序列表的子元素(li)的样式: 代码示例: 二、前端list列表

    2024年02月10日
    浏览(36)
  • react js自定义实现状态管理

    和源码可能不同,我没看过源码,只是实现一下 不足的是,还是需要forceUpdate 实现模块化

    2024年01月18日
    浏览(38)
  • JavaScript框架 Angular、React、Vue.js 的全栈解决方案比较

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。前端框架(React、Angular 和 Vue)进行简化比较。 MERN 技术栈包含四大具体组件: MongoDB:一款强大的 NoSQL 数据库,以灵活的 JSON 格式存储数据。 Express.js:一套极简但强大的

    2024年02月03日
    浏览(54)
  • 2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较

    🎉欢迎来到Java学习路线专栏~探索2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:Java学习路线 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 🍹文章作者技术和水

    2024年02月11日
    浏览(47)
  • react+video.js h5自定义视频暂停图标

    目录 参考网址 效果图,暂停时显示暂停图标,播放时隐藏暂停图标 代码说明,代码传入url后,可直接复制使用 VideoPausedIcon.ts 组件 VideoCom.tsx Video.module.less 参考网址  在Video.js播放器中定制自己的组件 - acgtofe 效果图,暂停时显示暂停图标,播放时隐藏暂停图标 代码说明,代

    2024年02月02日
    浏览(44)
  • 前端Vue自定义简单好用商品分类列表组件 侧边栏商品分类组件

    前端Vue自定义简单好用商品分类列表组件 侧边栏商品分类组件 , 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13148 效果图如下: 使用方法 HTML代码实现部分

    2024年02月10日
    浏览(46)
  • 【前端知识】React 基础巩固(四十六)——自定义Hook的应用

    自定义Hook本质上只是一种函数代码逻辑的抽取,严格意义上而言,它并不算React的特性。 实现组件创建/销毁时打印日志 实现Context共享 封装 TokenContext 和 UserContext 两个Context在自定义Hook useUserToken 中,通过使用 userUserToken 同时获取两个Context的内容: 实现获取滚动位置 封装滚

    2024年02月14日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包