React(Hook)+TS+axios+ant design+json server实现todolist效果(整体目录结构设计)

简介: React(Hook)+TS+axios+ant design+json server实现todolist效果(整体目录结构设计)

第一节 创建项目 todolist项目

技术选型 React(Hook)+TS+axios+ant design+json server npx create-react-app HookTodoList --template typescript hook 16.8之后写法 Ts 限制数据类型 axios 请求 ant design pc组件库 json server模拟数据 # 第二节 创建项目 前端交流群可以私信我 微信公众号是前端小歌谣 想要源码的话也乐意关注我 评论区给邮箱发源码 npx create-react-app todolist --template typescript package.json 配置文件 # 第三节 项目目录和页面修改 清除多余样式 修改输出为hello world # 第四节 增加ant design库 npm install antd 渲染一个table # 第五节 Json server模拟数据请求 Json server模拟数据请求 npm install -g json-server json-server --watch db.json --port 5000


第六节 封装axios请求

npm install axios


第七节 请求接口调用

第八节 问题解决和列表渲染

第九节 简单定义ts数据类型

第十节 增加一个新增页面(样式绘制)

第十一节 增加一个新增页面(样式绘制)优化

第十二节 解决问题并完善新增页面

第十三节 状态修改

第十四节 任务删除

第十五节 课程的回顾

详情页 选项卡方式 增删改查 ```


Json server模拟数据格式

{ "hookList": [ { "taskName": "写诗", "status": "1", "id": 5 }, { "taskName": "写诗", "status": "0", "id": 6 }, { "taskName": "作曲", "status": "0", "id": 7 }, { "taskName": "唱歌", "status": "0", "id": 8 }, { "taskName": "跳舞", "status": "0", "id": 9 } ],


list列表

``` import { Button, Space, Table, Tag } from 'antd';


import type { ColumnsType } from 'antd/es/table'; import React, { useEffect, useState } from 'react'; import { getHookList } from '../service/codeing'; import TodoAdd from './TodoAdd'; import axios from 'axios'; interface DataType { id:number, taskName:string, status:boolean } interface IHookList{ id:number, taskName:string, status:boolean } const TodoList: React.FC = () => { const columns: ColumnsType = [ { title: 'id', dataIndex: 'id', key: 'id', render: text => {text}, }, { title: '任务名称', dataIndex: 'taskName', key: 'taskName', }, { title: '任务状态', dataIndex: 'status', key: 'status', render: text => {text==true?"已完成":"未完成"}, },
{
        title: '操作',
        key: 'action',
        render: (_, record) => (
            <Space size="middle">
                <a onClick={()=>handleStatus(record,"0")}>修改为未完成</a>
                <a onClick={()=>handleStatus(record,"1")}>修改为已完成</a>
                <a onClick={()=>handleDelete(record)}>删除</a>
            </Space>
        ),
    },
];
const handleDelete=(record:any)=>{
    axios.delete(`http://localhost:5000/hookList/${record.id}`, {
    }).then(res => {
       initMenuList()
    })
}
const handleStatus=(record:any,data:any)=>{
    axios.patch(`http://localhost:5000/hookList/${record.id}`, {
        status:data
    }).then(res => {
       console.log(res)
       initMenuList()
    })
}
const [visable,setVisable]=useState<boolean>(false)
const handleClick=()=>{
   setVisable(true)
}
useEffect(() => {
    initMenuList();
}, []);
const [data,setData]=useState<Array<IHookList>>()
const initMenuList = async () => {
    // 想加入前端交流群可以私信我
    const response = await getHookList({  });
    setData(response.data)
};
const onCancle=()=>{
    setVisable(false)
}
const onConfirm=()=>{
    initMenuList()
    setVisable(false)
}
return (
<>
<Button type='primary' onClick={handleClick}>新增任务</Button>
<Table columns={columns} dataSource={data} />
   <TodoAdd visable={visable} onConfirm={onConfirm} onCancle={onCancle}></TodoAdd>
</>)
} export default TodoList; ```


ListAdd页面

``` import { Space, Table, Tag, Form, Input, Modal } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import React, { useEffect, useState } from 'react'; import { getHookList } from '../service/codeing'; import axios from 'axios'; import { useForm } from 'antd/es/form/Form'; interface DataType { id: number, taskName: string, status: boolean } interface IHookList { id: number, taskName: string, status: boolean } const columns: ColumnsType = [ { title: 'id', dataIndex: 'id', key: 'id', render: text => {text}, }, { title: '任务名称', dataIndex: 'taskName', key: 'taskName', }, { title: '任务状态', dataIndex: 'status', key: 'status', render: text => {text == true ? "已完成" : "未完成"}, },
{
    title: '操作',
    key: 'action',
    render: (_, record) => (
        <Space size="middle">
            <a>状态修改</a>
        </Space>
    ),
},


];


const TodoAdd: React.FC = (props: any) => { const { visable } = props const [form] = useForm() useEffect(() => { initMenuList(); }, []); const [data, setData] = useState >() const initMenuList = async () => { // 想加入前端交流群可以私信我
const response = await getHookList({});
    setData(response.data)
};
const handleOK = () => {
    axios.post(`http://localhost:5000/hookList`, {
        taskName: form.getFieldValue("name"),
        status:"0"
    }).then(res => {
        props.onConfirm();
    })
}
const handleCancle = () => {
    props.onCancle()
}
return (
    <Modal title="新增任务" open={visable} onOk={handleOK} onCancel={handleCancle}>
        <Form form={form}>
            <Form.Item label="任务名称" name="name">
                <Input placeholder='请输入任务名称'></Input>
            </Form.Item>
        </Form>
    </Modal>
)
}


export default TodoAdd; ```


axios封装部分

``` import axios from "axios"; const instance=axios.create({ baseURL:"http://127.0.0.1:5000", timeout:60000 }) export function get(url,data={}){ return new Promise((resolve,reject)=>{ instance.get(url,{ params:data }).then((response)=>{ resolve(response) }).catch((err)=>{ reject(err) }) }) } export function post(url,data={}){ return new Promise((resolve,reject)=>{ instance.post(url,data).then( (response)=>{ resolve(response.data) }, (err)=>{ reject(err) } ) }) }


```


结果展示

image.png

image.png



源码和视频地址

视频地址

https://space.bilibili.com/474556051/channel/collectiondetail?sid=960841


源码地址

https://gitee.com/geyaoisgeyao/hook-todolist.git


相关文章
|
3月前
|
前端开发
React使用useRef ts 报错
【8月更文挑战第17天】
67 4
|
25天前
|
前端开发 JavaScript 测试技术
React Server Side Rendering (SSR) 详解
【10月更文挑战第19天】React Server Side Rendering (SSR) 是一种在服务器端渲染 React 应用的技术,通过在服务器上预先生成 HTML 内容,提高首屏加载速度和 SEO。本文从概念入手,逐步探讨 SSR 的实现步骤、常见问题及解决方案,并通过代码示例进行说明。
67 3
|
1月前
vue3 + Ts 中 使用 class 封装 axios
【10月更文挑战第8天】
111 1
|
1月前
vue3 + Ts 中 使用 class 封装 axios
【10月更文挑战第5天】
137 1
|
2月前
|
资源调度 JavaScript 前端开发
使用vite+react+ts+Ant Design开发后台管理项目(二)
使用vite+react+ts+Ant Design开发后台管理项目(二)
|
2月前
|
JSON 前端开发 中间件
React读取properties配置文件转化为json对象并使用在url地址中
本文介绍了如何在React项目中读取properties配置文件,将其内容转化为JSON对象,并在请求URL地址时使用这些配置。文章详细说明了异步读取文件、处理字符串转换为JSON对象的过程,并提供了一个封装函数,用于在发起请求前动态生成配置化的URL地址。
79 1
|
3月前
|
前端开发 JavaScript 算法
React Server Component 使用问题之想在路由切换时保持客户端状态,如何实现
React Server Component 使用问题之想在路由切换时保持客户端状态,如何实现
|
3月前
|
前端开发 JavaScript PHP
React Server Component 使用问题之路由的能力,如何实现
React Server Component 使用问题之路由的能力,如何实现
|
3月前
|
前端开发 JavaScript
React Server Component 使用问题之添加jsx的组件化能力,如何操作
React Server Component 使用问题之添加jsx的组件化能力,如何操作
|
3月前
|
前端开发 PHP 开发者
React Server Component 使用问题之怎么使用Docker运行PHP应用
React Server Component 使用问题之怎么使用Docker运行PHP应用
下一篇
无影云桌面