【Umi+Antd+Ts实战】新增商品弹框组件【V1.0】

2023-11-19

新增商品弹框组件

先看效果

1.点击+符号,弹出新增商品组件
在这里插入图片描述

路由配置可以参考下面博客
https://blog.csdn.net/weixin_43352901/article/details/108536112

2.新增商品弹框内容
在这里插入图片描述

文件目录

在这里插入图片描述

文件解析

const.ts
export const formLayout = {
  labelCol: { // 标签大小
    sm: { span: 6 },
    xs: { span: 24 }
  },
  wrapperCol: { // 输入控件的大小
    sm: { span: 16 },
    xs: { span: 24 }
  }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

index.tsx

实现效果
在这里插入图片描述

import React, { useState } from 'react'
import { Tooltip } from 'antd'
import { PlusCircleOutlined } from '@ant-design/icons'

import './index.styl' // 引入样式
import AddShopModal from './addShop' // 引入新增商品组件

export default () => {
  const [state, setState] = useState({ // 控制商品组件是否 可见 或者 可编辑
    isEditAddShop: false,
    addShopVisible: false
  })

  /**
 - 打开/关闭新增商品组件弹窗
 - @param visible
 - @param isEdit
 - ?:可选参数--可有可无
   */
  const handleToggleAddShop = (visible: boolean, isEdit?: boolean) => {
    // ...state 设置初始状态,如果有参数传入,值发送变化,则 isEditAddShop: isEdit, addShopVisible: visible 覆盖state的值
    setState({ ...state, isEditAddShop: isEdit, addShopVisible: visible })
  }

  return (
    <> // 最外层 div 可以省略
      <div>
        <Tooltip title='新增商品'>
          <PlusCircleOutlined onClick={() => handleToggleAddShop(true, false)} />
        </Tooltip>
      </div>
      <AddShopModal
        isEdit={state.isEditAddShop} // 新增商品 是否可编辑 通过 prop 传递 state.isEditAddShop的值给 新增商品组件,从而控制是否编辑状态 
        visible={state.addShopVisible} // 同理上面
        onClose={() => handleToggleAddShop(false)}
      />
    </>
  )
}
addShop.tsx

分步骤解析

  • 文件导入
/**
* 新建商品组件
*/
import React, { useState, useEffect } from 'react'
import { Button, Modal, Form, Input, Select, Upload, message } from 'antd'
import { PlusCircleOutlined, DeleteOutlined, DownloadOutlined, UploadOutlined } from '@ant-design/icons'
import _ from 'lodash'
import { generate } from 'shortid'
import { Store } from 'antd/lib/form/interface'

import { formLayout } from './const' // 用来定义label标签和输入控件的大小与间隔
import { ShopComponent } from '@/interfaces/shop-component'
import { uploadAddShopFile } from '@/services/shop-component/addShop' // 新增商品接口
import { useCommit, useLoading, useModelState } from '@/models/shop-component/addShop-model' // 调用接口/数据存储的实现方法

规范注意点:

1.从外部导入的文件/插件等,统一放在最上面,一起放
2.从内部导入的文件/插件等,统一放在外部导入的文件/插件 的 下面 (可以隔开一格来区分)

这里引用了shortid 里面的 generate,用于生成唯一的 key,这样我们点击 添加参数 时,就可以不断新增不重复的项(key不同),因为React中,每一项都需要一个 唯一的key 去区分不同的项

可以参看下面博客
https://blog.csdn.net/weixin_43352901/article/details/108603456

这里引用了 lodash 工具库,里面集成了很多好用的JS方法,可以去下面链接查看

在这里插入图片描述

https://www.lodashjs.com/

formLayout 放在这里使用
在这里插入图片描述
ShopComponent 为 Interface接口 定义 数据类型命名和契约
在这里插入图片描述

export declare namespace ShopComponent {
  // 商品类型参数
  interface SParamsType {
    key?: string,
    name: string,
    anName: string,
    value: string,
    type: string
  }
}

这里 declare声明 了 namespace命名空间
在这里插入图片描述
具体详情请看下面链接

https://www.tslang.cn/docs/handbook/declaration-files/by-example.html

  • 定义好从父组件传递过来的数据的类型
interface InitProps {
  isEdit: boolean
  visible: boolean
  onClose: () => void
}

在这里插入图片描述

void
在这里插入图片描述
在这里插入图片描述

void 参考下面两篇文章
http://cn.voidcc.com/question/p-xfcbxdcm-td.html
https://www.tslang.cn/docs/handbook/basic-types.html

  • 文本域和选择器选项
const { TextArea } = Input // 引用 文本域 组件
const { Option } = Select // 引用 选择器的 选项

在这里插入图片描述
在这里插入图片描述

参考官方文档

https://ant-design.gitee.io/components/select-cn/
https://ant-design.gitee.io/components/input-cn/

  • 商品弹框组件编写

**第一步:**初始化数据,定义state

export default function AddShopModal(props: InitProps) { // props 接受父组件传过来的数据
  
  const initParams: ShopComponent.SParamsType = { // 定义类型 并 初始化 ShopComponent 商品类型参数
    key: generate(), // 随机生成唯一的id,作为key
    name: '',
    anName: '',
    value: '',
    type: 'input'
  }

  const { onClose, visible, isEdit } = props // 对象解构
  const [form] = Form.useForm() // 表单form常用功能,要调用form里面的功能,需要定义下
  const [uploading, setUploading] = useState(false) // 上传按钮loading状态的state
  const [filePath, setFilePath] = useState('') // 设置文件路径state
  const [dataParams, setDataParams] = useState([initParams]) // 设置商品类型-添加参数的state
}

在这里插入图片描述
export default 参考自

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Umi+Antd+Ts实战】新增商品弹框组件【V1.0】 的相关文章

  • vue3 antd pro 框架动态路由

    此框架中路由权限使用了两种方法 主要介绍第二种方法 从路由表构建路由 前端对比后端权限字段过滤静态路由表 即 前端配置好全部的路由表 然后根据权限来与后端获取到的进行对比 最终展示对比后的数据 从后端获取路由表结构体 并构建前端路由 从后端
  • ProFrom套EditableProTable如何进行表单验证

    import React useRef from react import Button from antd import BetaSchemaForm DrawerForm ProCard from ant design pro comp
  • TS复习----TS中的接口

    目录 概念 属性接口 函数类型接口 可索引的类型 类类型接口 接口继承 概念 接口的作用 在面向对象编程中 接口是一种规范的定义 他定义了行为和动作的规范 在程序设计里面 接口起到了一种限制和规范的作用接口定义了某一批类所需要遵守的规范 接
  • antdv表格的rowSelection设置单选禁用选中等

    这个问题在项目中已经遇到过两次了 一次为表格想实现单选 禁用等 另一次则是今天 遇上需求需要在初始化表格的时候默认选中项目 鉴于自己的记性太差 记录记录 万一哪天又遇到这个问题心血来潮来翻了一翻博客 那问题就解决了 犹记得实现表格项单选和禁
  • vue3+ts实现todolist功能

    先看一下实现效果 可以看到内部实现的内容有enter输入 单项删除 全选 以及删除选中项等功能 具体在实现前需要常见有ts的vue3项目 项目创建 具体项目创建 就是 vue create 项目名称 在创建后 选择的时候有vue2和vue3
  • Ant Design Pro 从零到一教程

    说在最前面的话 可是能全网唯一适合小白的antd教程 因为我找了接近一个周的教程 无论是视频 博客等等都没有比较完整的教程 所以才说这可能是唯一全网适合小白教程 文章末有相关学习链接 适用人群 喜欢看文字或者代码学习的人 学习的人掌握基本的
  • Umi+Dva初印象<基础应用,结构,流转逻辑>

    目录 前言 知识储备 generator函数 Dva初识 实际交互 函数式组件 class组件 前言 项目初始为umi脚手架进行初始化 lt 初始化过程 http t csdn cn cuTaY gt 工程中加载了umi自带的antd ui
  • umi 后台管理demo

    umi 后台管理demo umi react ts dva antd egg 有待优化 简单的前后端管理demo 接口提供增删查改 前端也有相应功能 github代码 https github com huiBuiling ql admin
  • 如何更改ant design中单选按钮的颜色?

    我正在使用 antd 收音机和复选框 我想给他们定制颜色 我找到了有关复选框的答案 但找不到更改单选按钮颜色的方法 有什么办法可以做到吗 您可以通过覆盖以下 css 类来实现它 ant radio checked ant radio inn
  • 如何使用 Ant Design 创建问卷类型表单?

    Ant Design 提供了一个动态表单项 通过使用它 我可以添加和删除多个字段 但现在我想嵌套其中 即我想创建一个类似调查表的表单 在其中我想添加多个问题及其各自的答案 目前 当我添加问题时 它工作正常 但当我添加一个问题的答案时 它也会
  • 如何配置nextjs 9和ant design less的兼容性?

    升级后react react dom and nextjs发生此错误 发生构建错误 home lenovo node modules antd lib style index css 7 身体 语法错误 意外的标记 在 Module com
  • 使用表数据自定义 React Antd 表头

    In my React project I need to customize antd table header as follows 我在下面添加了示例代码 I need to have Sum of the amount in the
  • 在 antd Form + ReactJs 中使用 antd Tooltip

    如果我输入无效的邮件 ID 我需要使用 antd 工具提示显示 无效的电子邮件 如何在ReactJS antd Form中使用它 我现在使用的代码是 div div
  • 根据 antd 表的列过滤它

    首先 英语不是我的母语 所以可能会有错误 我开始用钩子做出反应 因为每个人都说它更容易 这里我有 antd 表和一个按钮 bootstrap 5 模式 这个模式包含 6 个按钮 id 标题 名字 姓氏 全选 确认您的选择 我的观点是用户从
  • 如何使用Radio.Group Antd设置检查?

    我有无线电绘制的动态数据 有一个活动无线电的 ID 它也是动态生成的 如何比较 id 并安装与 Radio Group 的检查 最后我需要获取表单中的单选值 该代码无法正常工作 动态数据可能会更大 const dynamiclyData i
  • 如何更改 Ant 表头复选框

    我的应用程序中有一个表 我在其中对每一行使用 select 当我单击并选择行时 左上角会出现一个选中的复选框 我不想显示该复选框 我想显示其他内容 例如带有文本的 div 仅当我单击一行中的复选框时 该 div 才会出现 这个怎么做 我试图
  • React - Internet Explorer 11 输入在第一次 onchange 后失去焦点

    我遇到了一个非常奇怪的问题 我无法理解 我目前正在使用 React 16 3 和 Antd 3 11 框架使用 create react app 并且我创建了一个表 该表在其标题列内呈现一个附加了 onChange 事件的组件 当我第一次关
  • 禁用 Reactjs 中的依赖下拉选项

    我正在制作一个简单的反应应用程序 其中有一些下拉列表 其中一个依赖于另一个 gt 这里下拉菜单 1 的值为游戏类型 例如Indoor and Outdoor gt 这里下拉菜单 2 的值为运动类型 例如Chess Tennis and Fo
  • 应该如何在 Ant Design Upload 组件中设置 customRequest 以使用 XMLHttpRequest?

    我的组件一团糟 现在我传递了一个函数 我已经尝试了一百万件事但无法让它工作 export default class DatafileUpload extends Component initialState fileUploading f
  • 如何在提交值后重置 antd datepicker?

    在这里 我提供了在codesandbox上工作的示例 提交表单后如何重置日期选择器值 state setFieldValue onChange setFieldValue gt this setState setFieldValue nul

随机推荐

  • Altium designer Silkscreen Over Component Pads

    在画pcb的时候 执行设计规则检查的时候总会出现Silkscreen Over Component Pads这个问题 该问题的意思是丝印层的文字和元件焊盘重合或者挨着很近 解决办法1 修改规则 在design rule中选择Silkscre
  • django解决使用DateTimeField添加、修改记录时不动态更新时间的问题

    解决方法 定义model时 若想动态显示最后的修改时间 使用 from django db import models from datetime import datetime models DateTimeField default d
  • 码云协同开发

    一 协同开发 为每一开发者创建一个分支 各自都在各自的分支上写代码 互不影响 完成后再合并dev分支 方式1 创建项目合作者 方式2 创建项目合作者
  • IP组播 —— IP组播的概念和地址

    一 IP数据报的三种传输方式 二 IP组播地址的范围及特点 三 硬件组播
  • SpringBoot找不到主类

    用idea把一个单独的springboot项目打开可以正确执行 可我把整个运维项目都放在一个目录用idea打开 idea识别不到主类 查看edit configurations里面的 main class也指定到了对应的applicatio
  • C#初始化数组的三种方式

    C 声明数组并初始化 有三种方式 对于一维数组 using System using System Data using System Configuration using System Web using System Web Secu
  • jenkins创建html文件夹失败,jenkins html发布者:目录存在,但未能复制到

    难道有人有不同的答案吗 Jenkins安装在Ubuntu 12 04下的tomcat下 我已经配置了使用CVS存储库进行构建 当我尝试进行新构建时 由于以下错误而失败 INFO INFO BUILD SUCCESS INFO INFO To
  • [实习]git ci/cd概念,创建流程以及常见字段含义

    1 基本概念 1 1 CI CD CI Continuous Integration 为持续集成 即在代码构建过程中持续地进行代码的集成 构建 以及自动化测试等 有了 CI 工具 我们可以在代码提交的过程中通过单元测试等尽早地发现引入的错误
  • 【安全脚本】模拟勒索病毒

    0x00 前置 1 将电脑上的重要文件加密 将文件以二进制的方式进行加密处理 导致加密过后的文件 要打开必须要解密 要解密必须要解密程序 2 传播 系统or程序漏洞 人为疏忽 后门或木马程序 3 解决 交钱 破解 数据备份 0x01 pyt
  • 华为机试题103-Redraiment的走法

    描述 Redraiment是走梅花桩的高手 Redraiment可以选择任意一个起点 从前到后 但只能从低处往高处的桩子走 他希望走的步数最多 你能替Redraiment研究他最多走的步数吗 数据范围 每组数据长度满足1 n 200 数据大
  • linux内核中的设计模式

    创建型 Object Pool Object Pool模式可以提升性能 尤其是在对象的分配 初始化成本高 使用频率高 但使用时间短的情况下 对象池可以设置对象池的大小和回收时间缓存预分配的对象 NT和Linux都有简单的预分配缓存对象的机制
  • web移动端布局的那些事儿

    原文地址 github com HuJiaoHJ bl web移动端布局范畴很广 其中比较基础的几个话题 移动端适配 1px border 基础布局 本文主要分享这三个话题 一 移动端适配 提起移动端适配 大家想到的肯定是rem flexi
  • 软件实施的面试准备

    01 计划安排 A 材料准备 离职证明 换 失业证 失业证 失业保险 培训课程 找体检报告 彩印一份 照片 学历证明 B 面试准备 B01 网上简历作修改 B02 练习自我介绍 DHV价值展示 不要太刻意 B03 工作内容讲解 B04 常见
  • 尚硅谷 Vue2.0 + Vue3.0 入门到精通教程学习笔记 (四)

    第四章 Vue 中的 ajax 4 1 解决开发环境 Ajax 跨域问题 Vue 脚手架配置代理 本案例采用 axios 作为发送 Ajax 请求的库 因此首先需要下载并引入 axios 在 VSCode 终端处输入命令 npm i axi
  • mysql中subsrt_MySQL

    MySQL SUBSTR 函数 截取字符串 SUBSTR 与SUBSTRING 意思相等 函数语法 SUBSTR str pos 截取从pos位置开始到最后的所有str字符串 SUBSTR str pos len 参数说明 str为列名 字
  • X2000 Linux 驱动中配置GPIO的上下拉

    由于sdk不支持标准gpio api函数int gpio pull updown unsigned gpio unsigned value 需要用到soc gpio h中的int jzgpio set func int port enum
  • 第一篇博--初入CSDN

    选择开博并计划按月定期发布一些敲码路上的收获和心得 目的是在梳理知识 复盘总结的同时 能够和志同道合的朋友们一起学习 共同进步 在互联网上留下一份自己的痕迹 与诸君共勉 联系方式 631435743 qq com 欢迎大家找我讨论计算机专业
  • 六、IDEA编写HelloWorld并运行

    IDEA IDEA 全称 IntelliJ IDEA 是java编程语言开发的集成环境 IntelliJ在业界被公认为最好的java开发工具 尤其在智能代码助手 代码自动提示 重构 JavaEE支持 各类版本工具 git svn等 JUni
  • hook中使用ref使用

    对于antd的fom表单 hook使用ref import React useState useEffect useRef from react const dateRef useRef dateRef current setFieldsV
  • 【Umi+Antd+Ts实战】新增商品弹框组件【V1.0】

    新增商品弹框组件 先看效果 1 点击 符号 弹出新增商品组件 路由配置可以参考下面博客 https blog csdn net weixin 43352901 article details 108536112 2 新增商品弹框内容 文件目