当前位置: 首页 > news >正文

定制表单排序,react, sort

概要

在实际开发中,我们常常碰到,一个页面根据条件不同,其展示的表单项需要动态改变位置;但是又不想写重复代码;可以试一下以下方法;

效果

在这里插入图片描述

使用的技术

  • Html
  • React,useMemo
  • ES6的扩展运算

代码

import React, { Fragment, useMemo } from 'react'

export default function DefaultPage() {

    const testComponent = () => {
        return <div key={"nationality"}>国籍:
            <select>
                <option value="1">中国</option>
                <option value="2">美国</option>
                <option value="3">韩国</option>
            </select>
        </div>

    }

    const fields = useMemo(() => {
        return {
            data: [
                {
                    id: 1,
                    name: 'name',
                    label: "姓名",
                    type: 'text'
                },
                {
                    id: 2,
                    name: 'age',
                    label: "年龄",
                    type: 'text'
                },
                {
                    id: 3,
                    name: 'address',
                    label: "地址",
                    type: 'text'
                }
             
            ],
            other: [
                {
                    id: 4,
                    name: 'email',
                    label: "邮箱",
                    otherComponent: <div>邮箱:<input type='email' /></div>

                },
                {
                    id: 6,
                    name: 'phone',
                    label: "电话",
                    otherComponent: <div>电话:<input type='phone' /></div>
                },
            ],
            other2: [
                {
                    id: 7,
                    name: 'nationality',
                    label: "国籍",
                    otherComponent: testComponent()
                },
            ]
        }
    }, [])


    const defaultFields = [...fields.data, ...fields.other, ...fields.other2]
    const appointFields = ["age", "nationality", "name"]
    const defaultSort = defaultFields.sort((a, b) => a.id - b.id)

    const appointSortList =()=>{
        const list = []
        appointFields.forEach((item) => {
            const newlist = defaultFields.filter((item2) => item2.name === item)
            list.push(...newlist)
        })
        return  list
    }
    const appointSort =  appointSortList()

    const totalRender = (list) => {
        return <div>
            {list?.map((item) => {
                if (item.otherComponent) {
                    return item.otherComponent
                } else {
                    return renderForm(item)
                }
            })}
        </div>
    }
    const renderForm = (item) => {
        return <div key={item.id}>
            {item.label}:
            <input type={item.type} name={item.name} key={item.id} />
        </div>
    }

    return (
        <Fragment>
            默认排序:
            {totalRender(defaultSort)}
            <br/>
            指定排序:---------------
           
            {totalRender(appointSort)}
        </Fragment>

    )
}


< Fragment >是代替<></>标签,无实际意义。指示提醒这是一大块代码块; useMemo是react中用于缓存计算结果的方法,可以根据依赖,动态刷新缓存值

⚠️testComponent方法要写在useMemo方法前,不然会报错
在这里插入图片描述

相关文章:

  • “慢SQL“治理的几点思考
  • LangChain开发(五)消息管理与聊天历史存储
  • 【前端】超链接标签(a标签)之href属性、target属性
  • ctf-web: 不统一的解析 + sql注入要求输入与输出相等 -- tpctf supersqli
  • 项目-苍穹外卖(十五) WebSocket+语音播报功能实现(来订单+催单)
  • 使用 PyCharm 创建 Python 项目时,默认生成的 .venv 文件夹是属于什么类型的虚拟环境
  • leetcode每日一题——k-avoiding 数组的最小总和
  • 主流软件工程模型全景剖析
  • 零拷贝原理面试回答
  • 【字符设备驱动开发–IMX6ULL】(二)Linux 设备号
  • 多模态交互下的车载机械臂体感控制系统设计与实现研究
  • 计算机网络基础:软件定义网络(SDN)深度解析
  • 使用 fetch 实现流式传输:核心原理与实践
  • 启幕数据结构算法雅航新章,穿梭C++梦幻领域的探索之旅——堆的应用之堆排、Top-K问题
  • 3.26 代码随想录第二十七天打卡
  • 参考文献格式对齐1-100
  • idea 快捷键
  • Harbor自建证书实现Https访问
  • LLVM学习-DragonEgg工具
  • 强化学习和智能决策:Q-Learning和Deep Q-Learning算法
  • 《风林火山》千呼万唤始出来,戛纳首映后口碑崩盘?
  • 北京韩美林艺术馆党支部书记郭莹病逝,终年40岁
  • 雅典卫城上空现“巨鞋”形状无人机群,希腊下令彻查
  • 终于,俄罗斯和乌克兰谈上了
  • 多地举办演唱会等吸引游客刺激消费,经济日报:引导粉丝经济理性健康发展
  • 车主质疑零跑汽车撞车后AEB未触发、气囊未弹出,4S店:其把油门当刹车