Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 中型项目:博客管理系统(前后端交互与状态管理)

中型项目:博客管理系统(前后端交互与状态管理)

在本项目中,我们将构建一个简单的博客管理系统,该系统允许管理员管理博客文章,功能包括创建、编辑、删除文章以及查看文章列表。我们将实现前后端的交互,并使用 React 的状态管理工具(如 useState、useReducer 或者 Redux)来管理应用的状态。


1. 项目简介

博客管理系统将包含以下功能:

  • 查看所有博客文章
  • 创建新的博客文章
  • 编辑已有的博客文章
  • 删除博客文章
  • 提交文章数据到服务器(前后端交互)
  • 前端使用 React 实现,后端使用假设的 REST API(如 JSONPlaceholder、MockAPI)

项目结构将包括:

  • React 前端:负责展示页面、处理交互和与后端交互。
  • 后端:提供 REST API 接口,进行数据处理和存储。

2. 项目结构

2.1 文件结构

src/ 
├── components/ 
│ ├── BlogList.js // 显示所有博客文章的组件 
│ ├── BlogItem.js // 单个博客文章的展示组件 
│ ├── AddBlog.js // 添加博客文章的表单组件 
│ ├── EditBlog.js // 编辑博客文章的表单组件 
│ └── Header.js // 网站头部组件 
├── services/ 
│ └── api.js // 用于处理与后端交互的 API 服务 
├── App.js // 主应用组件 
└── index.js // 入口文件

3. 关键技术

3.1 前端技术

  • React:用来构建用户界面。
  • Axios:用于处理与后端 API 的 HTTP 请求。
  • React Router:用于实现页面导航。
  • React Context API 或 Redux:用于管理全局状态,如用户身份、博客文章列表等。

3.2 后端技术

假设使用一个简单的 REST API 来处理数据操作:

  • POST /api/blogs: 创建博客文章
  • GET /api/blogs: 获取所有博客文章
  • GET /api/blogs/:id: 获取指定 ID 的博客文章
  • PUT /api/blogs/:id: 编辑指定 ID 的博客文章
  • DELETE /api/blogs/:id: 删除指定 ID 的博客文章

4. 创建博客管理系统

4.1 App.js 主应用组件

App.js 负责主应用的渲染和页面路由。它会根据不同的路由显示不同的组件。

import React, { useState, useEffect } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import BlogList from './components/BlogList';
import AddBlog from './components/AddBlog';
import EditBlog from './components/EditBlog';
import Header from './components/Header';
import { getBlogs } from './services/api';

function App() {
  const [blogs, setBlogs] = useState([]);

  // 获取博客文章列表
  useEffect(() => {
    getBlogs().then(data => setBlogs(data));
  }, []);

  return (
    <Router>
      <Header />
      <div className="App">
        <Switch>
          <Route path="/" exact>
            <BlogList blogs={blogs} />
          </Route>
          <Route path="/add" component={AddBlog} />
          <Route path="/edit/:id" component={EditBlog} />
        </Switch>
      </div>
    </Router>
  );
}

export default App;

4.2 BlogList.js 显示博客文章列表

BlogList.js 用于显示所有博客文章的列表,并提供删除和编辑功能。

import React from 'react';
import { Link } from 'react-router-dom';

function BlogList({ blogs }) {
  return (
    <div>
      <h1>博客列表</h1>
      <Link to="/add">添加新博客</Link>
      <ul>
        {blogs.map(blog => (
          <li key={blog.id}>
            <h3>{blog.title}</h3>
            <p>{blog.body}</p>
            <Link to={`/edit/${blog.id}`}>编辑</Link>
            <button>删除</button>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default BlogList;

4.3 AddBlog.js 创建博客文章表单

AddBlog.js 用于创建新的博客文章。用户填写表单并提交数据到后端 API。

import React, { useState } from 'react';
import { useHistory } from 'react-router-dom';
import { createBlog } from '../services/api';

function AddBlog() {
  const [title, setTitle] = useState('');
  const [body, setBody] = useState('');
  const history = useHistory();

  const handleSubmit = async (e) => {
    e.preventDefault();
    const newBlog = { title, body };
    await createBlog(newBlog);
    history.push('/');
  };

  return (
    <form onSubmit={handleSubmit}>
      <h1>添加博客文章</h1>
      <input
        type="text"
        placeholder="标题"
        value={title}
        onChange={(e) => setTitle(e.target.value)}
        required
      />
      <textarea
        placeholder="内容"
        value={body}
        onChange={(e) => setBody(e.target.value)}
        required
      />
      <button type="submit">提交</button>
    </form>
  );
}

export default AddBlog;

4.4 EditBlog.js 编辑博客文章表单

EditBlog.js 用于编辑已有的博客文章。用户可以修改文章内容并保存。

import React, { useState, useEffect } from 'react';
import { useHistory, useParams } from 'react-router-dom';
import { getBlogById, updateBlog } from '../services/api';

function EditBlog() {
  const [title, setTitle] = useState('');
  const [body, setBody] = useState('');
  const { id } = useParams();
  const history = useHistory();

  useEffect(() => {
    const fetchData = async () => {
      const blog = await getBlogById(id);
      setTitle(blog.title);
      setBody(blog.body);
    };
    fetchData();
  }, [id]);

  const handleSubmit = async (e) => {
    e.preventDefault();
    const updatedBlog = { title, body };
    await updateBlog(id, updatedBlog);
    history.push('/');
  };

  return (
    <form onSubmit={handleSubmit}>
      <h1>编辑博客文章</h1>
      <input
        type="text"
        placeholder="标题"
        value={title}
        onChange={(e) => setTitle(e.target.value)}
        required
      />
      <textarea
        placeholder="内容"
        value={body}
        onChange={(e) => setBody(e.target.value)}
        required
      />
      <button type="submit">更新</button>
    </form>
  );
}

export default EditBlog;

5. 后端 API 服务

5.1 api.js 后端交互

在 api.js 中,我们将实现与后端的交互,包括获取、创建、更新和删除博客文章的功能。

import axios from 'axios';

const API_URL = 'https://jsonplaceholder.typicode.com/posts'; // 假设使用 JSONPlaceholder API

// 获取所有博客文章
export const getBlogs = async () => {
  const response = await axios.get(API_URL);
  return response.data;
};

// 获取指定 ID 的博客文章
export const getBlogById = async (id) => {
  const response = await axios.get(`${API_URL}/${id}`);
  return response.data;
};

// 创建新的博客文章
export const createBlog = async (newBlog) => {
  const response = await axios.post(API_URL, newBlog);
  return response.data;
};

// 更新博客文章
export const updateBlog = async (id, updatedBlog) => {
  const response = await axios.put(`${API_URL}/${id}`, updatedBlog);
  return response.data;
};

// 删除博客文章
export const deleteBlog = async (id) => {
  await axios.delete(`${API_URL}/${id}`);
};

6. 状态管理

在此项目中,我们可以使用 React 内置的 useState 来管理博客列表等本地状态。如果应用复杂度增加,可以使用 useReducer 或 Redux 来集中管理状态。

7. 总结

通过本项目,我们实现了:

  • React 路由:实现了不同页面之间的跳转。
  • 前后端交互:通过 Axios 处理与 REST API 的通信。
  • 状态管理:使用 React 的 useState 和 useEffect 管理状态和副作用。
  • 表单处理:实现了创建和编辑博客文章的功能。

这个博客管理系统展示了 React 应用开发中常见的功能,适合作为前后端交互与状态管理的综合练习。

Last Updated:: 12/13/24, 11:37 AM