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

项目实战 -- 发布管理

   组件封装

先进行组件的封装,因为每一次待发布已发布这些格式是一样的,所以封装一个NewsPublish组件

import React from 'react';
import { Button,Table} from 'antd';function NewsPublish(props) {//父组件传属性const columns = [{title: '新闻标题',dataIndex: 'title',render:(title,item)=>{return <a href={`#/news-manage/preview/${item.id}`}>{title}</a>}},{title: '作者',dataIndex: 'author',},{title: '新闻分类',dataIndex: 'category',render:(category)=>{return  <div>{category.title}</div>}},{title: '操作',render:(record)=>{return <div><Button/></div>}},];return (<div><Table dataSource={props.dataSource} columns={columns} pagination={{//一页显示几条数据pageSize:5}}rowKey={item=>item.id}/></div>);
}export default NewsPublish;

需要使用的时候调用就好了

import React, { useEffect } from 'react'
import { useState } from 'react'
import NewsPublish from '../../../components/publish-manage/NewsPublish'
import axios from 'axios'export default function Published() {const {username} = JSON.parse(localStorage.getItem('token'))const [dataSource,setDataSource] = useState([])useEffect(() => {axios(`/news?author=${username}&publishState=2&_expand=category`).then(res=>{setDataSource(res.data)})},[username])return (<div><NewsPublish dataSource={dataSource}></NewsPublish></div>)
}

在这里不论是待发布还是已发布,区别就只有筛选的时候状态是1还是2

所以使用自定义hooks简化一下代码

自定义hooks

自定义hooks方便进行代码的复用,状态可以直接传一个参数给自定义hooks,这样就可以复用了,传id的目的是要知道具体要增删哪条数据

import React,{ useEffect,useState } from 'react'
import axios from 'axios'function usePublish(type) {//   不是组件,是自定义hooksconst { username } = JSON.parse(localStorage.getItem('token'))const [dataSource, setDataSource] = useState([])useEffect(() => {axios(`/news?author=${username}&publishState=${type}&_expand=category`).then((res) => {setDataSource(res.data)})}, [username,type])const handlePublish = (id)=>{console.log(id)}const handleSunset = (id)=>{}const handleDelete = (id)=>{}return{dataSource,handlePublish,handleSunset,handleDelete,}
}export default usePublish
import React, { useEffect } from 'react'
import NewsPublish from '../../../components/publish-manage/NewsPublish'
import usePublish from '../../../components/publish-manage/usePublish'
import { Button } from 'antd'export default function Sunset() {const {dataSource,handleSunset} = usePublish(3)return (<div><NewsPublish dataSource={dataSource} button={(id)=><Button danger onClick={()=>handleSunset(id)}>删除</Button>}></NewsPublish></div>)
}

实现方法

实现点击的时候调用的方法,每一个都不一样

import React, { useEffect, useState } from 'react'
import axios from 'axios'
import { notification } from 'antd'
import { useNavigate } from 'react-router-dom'function usePublish(type) {//   不是组件,是自定义hooksconst { username } = JSON.parse(localStorage.getItem('token'))const navigate = useNavigate()const [dataSource, setDataSource] = useState([])useEffect(() => {axios(`/news?author=${username}&publishState=${type}&_expand=category`).then((res) => {setDataSource(res.data)})}, [username, type])const handlePublish = (id) => {setDataSource(dataSource.filter((item) => item.id !== id))axios.patch(`/news/${id}`, {"publishState": 2,"publishTime": Date.now(),}).then((res) => {navigate('/publish-manage/published')notification.info({message:`通知`,description:`您可以到[发布管理/已发布]中查看您的新闻`,placement: 'bottomRight',})}) }const handleSunset = (id) => {setDataSource(dataSource.filter((item) => item.id !== id))axios.patch(`/news/${id}`, {"publishState": 3,"publishTime": Date.now(),}).then((res) => {navigate('/publish-manage/sunset')notification.info({message:`通知`,description:`您可以到[发布管理/已下线]中查看您的新闻`,placement: 'bottomRight',})}) }const handleDelete = (id) => {setDataSource(dataSource.filter((item) => item.id !== id))axios.delete(`/news/${id}`).then((res) => {notification.info({message:`通知`,description:`您已经删除了已下线的新闻`,placement: 'bottomRight',})}) }return {dataSource,handlePublish,handleSunset,handleDelete,}
}export default usePublish
import React, { useEffect } from 'react'
import NewsPublish from '../../../components/publish-manage/NewsPublish'
import usePublish from '../../../components/publish-manage/usePublish'
import { Button } from 'antd'export default function Sunset() {const {dataSource,handleDelete} = usePublish(3)return (<div><NewsPublish dataSource={dataSource} button={(id)=><Button danger onClick={()=>handleDelete(id)}>删除</Button>}></NewsPublish></div>)
}

就这样

相关文章:

  • 考研系列-计算机网络-第四章、网络层
  • LeetCode算法题(Go语言实现)_54
  • java/python——两个行为(操作)满足原子性的实现
  • Web前端:Overflow属性(超出裁剪属性)
  • vllm+vllm-ascend本地部署QwQ-32B
  • MYSQL之基础认识(卸载安装登录, 基本概念)
  • Linux论坛安装
  • 【第四章】19-匹配规则定义
  • JavaScript实现二级菜单
  • 【uniapp-兼容性处理】安卓uView组件中u-input后置插槽不展示
  • Vmware esxi 给现有磁盘增加空间后并扩展系统里磁盘空间
  • Redis 键管理
  • AI Agent认知框架(ReAct、函数调用、计划与执行、自问自答、批判修正、思维链、思维树详解和对比,最后表格整理总结
  • redis-7 安装
  • linux sysfs使用cat无显示的原因:返回值未赋值
  • 《深入解析C++中的explicit关键字:防止隐式转换的利器》
  • C语言main的参数;argc与argv
  • 开源键鼠共享软件的“爱恨情仇“:Deskflow、InputLeap与Barrier的演化史
  • Shell脚本-四则运算符号
  • spark基础介绍
  • 杭州挂牌临平区两宗住宅用地,起始总价约11.02亿元
  • 中央网信办部署开展“清朗·整治AI技术滥用”专项行动
  • 2025年“投资新余•上海行”钢铁产业“双招双引”推介会成功举行
  • 俄外长:俄将在不损害伙伴关系前提下发展对美关系
  • 江西省公安厅警务保障部原主任辛卫平主动交代问题,正接受审查调查
  • 王沪宁主持召开全国政协主席会议