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

项目实战--新闻分类

从antd中拿一个表格

表格 Table - Ant Designhttps://ant-design.antgroup.com/components/table-cn#table-demo-edit-cell使用的是可编辑单元格

 实现引入可编辑单元格:

import React, { useState, useEffect, useRef, useContext } from 'react'
import { Button, Table, Tag, Modal, Popover, Switch, Input, Form } from 'antd'
import {EditOutlined,DeleteOutlined,ExclamationCircleOutlined,
} from '@ant-design/icons'
import axios from 'axios'
import { data } from 'react-router-dom'
const { confirm } = Modalfunction NewsCategory() {const [dataSource, setdataSource] = useState([])useEffect(() => {axios.get('/categories').then((res) => {setdataSource(res.data)})}, [])var __awaiter =(this && this.__awaiter) ||function (thisArg, _arguments, P, generator) {function adopt(value) {return value instanceof P? value: new P(function (resolve) {resolve(value)})}return new (P || (P = Promise))(function (resolve, reject) {function fulfilled(value) {try {step(generator.next(value))} catch (e) {reject(e)}}function rejected(value) {try {step(generator['throw'](value))} catch (e) {reject(e)}}function step(result) {result.done? resolve(result.value): adopt(result.value).then(fulfilled, rejected)}step((generator = generator.apply(thisArg, _arguments || [])).next())})}var __rest =(this && this.__rest) ||function (s, e) {var t = {}for (var p in s)if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)t[p] = s[p]if (s != null && typeof Object.getOwnPropertySymbols === 'function')for (var i = 0, p = Object.getOwnPropertySymbols(s);i < p.length;i++) {if (e.indexOf(p[i]) < 0 &&Object.prototype.propertyIsEnumerable.call(s, p[i]))t[p[i]] = s[p[i]]}return t}const handleSave = (record) => {setdataSource(dataSource.map((item) => {if (item.id === record.id) {return {id: item.id,title: record.title,value: record.value,}}return item}))axios.patch(`/categories/${record.id}`, {title: record.title,value: record.title,})}const columns = [{title: 'ID',dataIndex: 'id',render: (id) => {return <b>{id}</b>},},{title: '栏目名称',dataIndex: 'title',onCell: (record) => ({record,editable: true,dataIndex: 'title',title: '栏目名称',handleSave: handleSave,}),},{title: '操作',render: (record) => {return (<div><Buttondangertype="primary"shape="circle"icon={<DeleteOutlined />}onClick={() => confirmMethod(record)}/></div>)},},]const confirmMethod = (record) => {confirm({title: 'Do you Want to delete these items?',icon: <ExclamationCircleOutlined />,onOk() {deleteMethod(record)},onCancel() {console.log('Cancel')},})console.log('确认删除')}const deleteMethod = (record) => {setdataSource(dataSource.filter((item) => item.id !== record.id))//同步状态  后端axios.delete(`/categories/${record.id}`)}const EditableContext = React.createContext(null)const EditableRow = (_a) => {var { index } = _a,props = __rest(_a, ['index'])const [form] = Form.useForm()return (<Form form={form} component={false}><EditableContext.Provider value={form}><tr {...props} /></EditableContext.Provider></Form>)}const EditableCell = (_a) => {var { title, editable, children, dataIndex, record, handleSave } = _a,restProps = __rest(_a, ['title','editable','children','dataIndex','record','handleSave',])const [editing, setEditing] = useState(false)const inputRef = useRef(null)const form = useContext(EditableContext)useEffect(() => {var _aif (editing) {;(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus()}}, [editing])const toggleEdit = () => {setEditing(!editing)form.setFieldsValue({ [dataIndex]: record[dataIndex] })}const save = () =>__awaiter(void 0, void 0, void 0, function* () {try {const values = yield form.validateFields()toggleEdit()handleSave(Object.assign(Object.assign({}, record), values))} catch (errInfo) {console.log('Save failed:', errInfo)}})let childNode = childrenif (editable) {childNode = editing ? (<Form.Itemstyle={{ margin: 0 }}name={dataIndex}rules={[{ required: true, message: `${title} is required.` }]}><Input ref={inputRef} onPressEnter={save} onBlur={save} /></Form.Item>) : (<divclassName="editable-cell-value-wrap"style={{ paddingInlineEnd: 24 }}onClick={toggleEdit}>{children}</div>)}return <td {...restProps}>{childNode}</td>}return (<div><TabledataSource={dataSource}columns={columns}pagination={{//一页显示几条数据pageSize: 5,}}rowKey={(item) => item.id}components={{body: {row: EditableRow,cell: EditableCell,},}}/></div>)
}export default NewsCategory

  

http://www.xdnf.cn/news/22213.html

相关文章:

  • 信息系统项目管理师_第十一章 项目采购管理
  • win10系统完美配置mamba-ssm全整合方案
  • 爱普生RX8010SJ实时时钟模块在安防监控设备中的应用
  • 守护进程编程以及ssh反向代理
  • AUTOSAR图解==>AUTOSAR_SWS_CryptoInterface
  • 淘宝商品搜索爬虫:Python 实现教程
  • 江苏广电HC2910-创维代工-Hi3798cv200-2+8G-海美迪安卓7.0-强刷包
  • 深度学习-torch,全连接神经网路
  • 软硬链接与动静态库基本概念(快速回顾)
  • 浅析数据库面试问题
  • `get_peft_model` 是 `peft` 库什么方法
  • 【CPP】死锁产生、排查、避免
  • 国内主要半导体厂家
  • Java 接入deepseek(非流式)
  • 数据资产登记导则详解 | 企业如何规范化登记与管理数据资产?
  • 机械臂速成小指南(二十五):机械臂与人工智能的有机结合
  • 基于 S2SH 架构的企业车辆管理系统:设计、实现与应用
  • OOM 未触发 JVM 崩溃的可能原因
  • 椰汁椰肉生产车间设计
  • 怎么隐藏QTabWidget内的页面
  • Git 解决“Filename too long”问题
  • 企业应用大模型报告:如何应对变革,构建专属“我的AI”
  • 生物化学笔记:医学免疫学原理22 肿瘤及肿瘤治疗
  • vue3+vite 实现.env全局配置
  • 大模型时代:AI应用的变革与挑战
  • 冰箱在储存各种疫苗时要经过多少道程序又会面临哪些风险?
  • linux获取cpu使用率(sy%+us%)
  • 文件二进制读写和文本读写以及编码解码
  • Android 12系统静态壁纸深度定制指南
  • day2-小白学习JAVA---java第一个程序