当前位置: 首页 > 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基础介绍
  • 湖南平江发生人员溺亡事件,已造成4人死亡
  • 普京签署有关批准俄罗斯与伊朗全面战略伙伴关系条约的联邦法令
  • 外媒:罗马教皇方济各去世
  • 中印尼举行外长防长“2+2”对话机制首次部长级会议
  • 87岁老人花3万多做“血液净化”延年益寿?医院“张主任”:我那是善意的欺骗
  • 独家丨远洋渔船船长被害案嫌犯移送检方报捕,船上两段视频曝光