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

新增商品弹框组件

先看效果

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命名空间

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
umi是一款基于React的可扩展企业级前端应用架,它提供了一套完整的开发和构建工具链,可以帮助开发者快速搭建复杂的单页面应用和多页面应用。umi的设计理念是约定大于配置,通过约定的文件结构可以自动生成路由、动态加载页面和组件等,同时还支持插件机制,可以轻松地集成各种功能和扩展。umi还提供了一些常用的功能和工具,如国际化、权限控制、数据模拟等,方便开发者快速开发高质量的前端应用。 antd-mobile是一个基于React和antd设计体系的移动端UI组件库,它提供了一系列优雅美观的组件,如按钮、导航栏、列表、输入等,可以帮助开发者快速构建优质的移动端用户界面。antd-mobile的组件风格简约而不简单,同时还支持主题定制和样式覆盖,开发者可以根据自己的需要进行自定义。antd-mobile还提供了一些常用的功能和工具,如表单校验、图片裁剪、手势操作等,方便开发者解决一些常见的问题。 umiantd-mobile可以很好地配合使用,umi提供了一套完整的开发架和工具链,而antd-mobile提供了美观实用的移动端UI组件,开发者可以通过umi搭建整个项目的结构和配置,然后使用antd-mobile的组件来构建用户界面。umiantd-mobile都是社区广泛使用和维护的项目,拥有强大的生态系统和活跃的社区支持,开发者在使用过程中可以获得良好的技术支持和文档资源,提高开发效率和质量。总之,umiantd-mobile是一对强力组合,可以帮助开发者快速构建优质的企业级移动应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值