React AJAX

以下是关于在 React 中使用 AJAX 的中文讲解,结合 Visual Studio Code(VSCode)环境,基于 npm 创建的 React 项目,内容简洁清晰,适合初学者。讲解包括 AJAX 的基本概念、在 React 中使用 AJAX 的方法(以 fetchaxios 为例)、中文支持、在 VSCode 中的实践以及调试方法。重点涵盖函数组件(现代 React 推荐方式)和类组件的使用。

1. 什么是 AJAX?

AJAX(Asynchronous JavaScript and XML)是一种在浏览器中异步发送 HTTP 请求的技术,允许 React 组件从服务器获取数据(如 JSON)并动态更新 UI,而无需刷新页面。

  • 特点
  • 异步:请求不会阻塞 UI,用户可继续交互。
  • 动态更新:结合 React 的状态(State)更新界面。
  • 中文支持:可以处理中文数据(如 API 返回的中文用户名)。
  • 常用工具
    • fetch:浏览器内置 API,简单易用。
    • axios:流行的第三方库,支持更多功能。
  • 使用场景
  • 获取用户列表、产品数据等。
  • 提交表单数据。
  • 动态加载中文内容(如新闻标题)。

2. 准备工作

确保 React 项目已创建

  • 使用 create-react-app 创建项目(参考前述“React 项目创建”指南):
  npx create-react-app my-ajax-app
  cd my-ajax-app
  npm start
  • 项目在 http://localhost:3000 运行。

安装 axios(可选)

  • 如果使用 axios,安装:
  npm install axios

VSCode 配置

  • 安装扩展
  • ESLint:检查代码规范。
  • Prettier:格式化代码。
  • Reactjs code snippets:快速插入 JSX 和组件代码。
  • Auto Rename Tag:同步编辑 HTML 标签。
  • 配置 ESLint 和 Prettier
  • 安装依赖:
    bash npm install --save-dev eslint prettier eslint-plugin-react eslint-plugin-react-hooks
  • 创建 .eslintrc.json
    json { "env": { "browser": true, "es2021": true }, "extends": ["eslint:recommended", "plugin:react/recommended", "plugin:react-hooks/recommended"], "parserOptions": { "ecmaVersion": 12, "sourceType": "module" }, "plugins": ["react", "react-hooks"], "rules": {} }
  • 创建 .prettierrc
    json { "semi": true, "trailingComma": "es5", "singleQuote": true, "printWidth": 80 }
  • 中文支持
  • 确保 public/index.html 包含:
    html <meta charset="UTF-8">
  • 配置 VSCode 终端支持中文:
    json { "terminal.integrated.env.osx": { "LANG": "zh_CN.UTF-8" } }
  • 保存源文件为 UTF-8(右下角点击编码,选择“通过 UTF-8 保存”)。

3. 函数组件中的 AJAX

函数组件结合 useStateuseEffect Hooks 是现代 React 实现 AJAX 的推荐方式。

示例代码:使用 fetch 获取数据

使用公开 API(JSONPlaceholder) 获取用户列表:

import React, { useState, useEffect } from ‘react’;
import ‘./App.css’;

function App() {
const [users, setUsers] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);

useEffect(() => {
fetch(‘https://jsonplaceholder.typicode.com/users’)
.then(response => response.json())
.then(data => {
setUsers(data);
setLoading(false);
})
.catch(error => {
setError(‘获取数据失败’);
setLoading(false);
});
}, []); // 空依赖数组,仅在挂载时运行

if (loading) return

加载中…;
if (error) return

{error};

return (

用户列表

  • {user.name}

);
}

export default App;

代码说明

  • useState
  • users:存储 API 返回的用户数据。
  • loading:控制加载状态。
  • error:存储错误信息(中文提示)。
  • useEffect
  • 在组件挂载时发起 fetch 请求。
  • 空依赖数组 [] 确保仅运行一次(类似 componentDidMount)。
  • fetch:获取 JSON 数据,解析后更新状态。
  • 条件渲染:根据 loadingerror 显示不同 UI。
  • 中文支持:显示中文标题“用户列表”和错误提示“获取数据失败”。

运行代码

  1. 保存 App.js,确保终端运行:
   npm start
  1. 浏览器在 http://localhost:3000 显示加载提示,随后渲染用户列表。

示例代码:使用 axios 提交表单

结合 axios 提交中文数据:

import React, { useState } from ‘react’;
import axios from ‘axios’;
import ‘./App.css’;

function App() {
const [name, setName] = useState(”);
const [message, setMessage] = useState(”);

const handleSubmit = async (event) => {
event.preventDefault();
try {
const response = await axios.post(‘https://jsonplaceholder.typicode.com/users’, {
name,
});
setMessage(提交成功:${response.data.name});
setName(”);
} catch (error) {
setMessage(‘提交失败,请重试’);
}
};

return (

提交用户信息

setName(e.target.value)} placeholder=”请输入姓名” /> 提交

{message &&

{message}}
);
}

export default App;

代码说明

  • axios:使用 axios.post 提交数据。
  • async/await:简化异步处理。
  • 表单处理onSubmit 触发请求,onChange 更新输入状态。
  • 中文支持:输入框支持中文,显示中文提示(如“提交成功”)。

4. 类组件中的 AJAX

类组件使用生命周期方法(如 componentDidMount)处理 AJAX 请求。

示例代码:使用 fetch

修改 src/App.js

import React, { Component } from ‘react’;
import ‘./App.css’;

class App extends Component {
constructor(props) {
super(props);
this.state = {
users: [],
loading: true,
error: null,
};
}

componentDidMount() {
fetch(‘https://jsonplaceholder.typicode.com/users’)
.then(response => response.json())
.then(data => {
this.setState({ users: data, loading: false });
})
.catch(error => {
this.setState({ error: ‘获取数据失败’, loading: false });
});
}

render() {
const { users, loading, error } = this.state;

if (loading) return <p>加载中...</p>;
if (error) return <p>{error}</p>;

return (
  <div className="App">
    <h1>用户列表</h1>
    <ul>
      {users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  </div>
);

}
}

export default App;

代码说明

  • componentDidMount:组件挂载后发起 fetch 请求。
  • setState:更新 usersloadingerror 状态。
  • 中文支持:显示中文标题和错误提示。

5. AJAX 注意事项

  • 错误处理:始终处理请求失败情况,使用 try/catch.catch
  • 加载状态:通过状态(如 loading)显示加载提示。
  • 清理副作用
  • 函数组件:useEffect 返回清理函数。
    javascript useEffect(() => { const controller = new AbortController(); fetch(url, { signal: controller.signal }); return () => controller.abort(); }, []);
  • 类组件:在 componentWillUnmount 清理。
  • 中文数据:确保 API 返回的中文数据以 UTF-8 编码。

6. 调试 AJAX

  1. Chrome 开发者工具
  • F12,切换到“网络”选项卡,检查 AJAX 请求状态。
  • 使用 React Developer Tools 检查状态更新。
  • 查看控制台,排查错误。
  1. VSCode 调试
  • 配置 launch.json
    json { "version": "0.2.0", "configurations": [ { "type": "chrome", "request": "launch", "name": "Launch Chrome", "url": "http://localhost:3000", "webRoot": "${workspaceFolder}" } ] }
  • 运行 npm start,按 F5 调试,设置断点检查状态或请求。

7. 中文支持

  • JSX 中的中文:直接使用 UTF-8 编码的中文:
  <h1>用户列表</h1>
  • VSCode 配置
  • 确保源文件为 UTF-8(右下角选择“通过 UTF-8 保存”)。
  • 配置终端:
    json { "terminal.integrated.env.osx": { "LANG": "zh_CN.UTF-8" } }
  • HTML 配置:确保 public/index.html 包含:
  <meta charset="UTF-8">

8. 常见问题

  • 请求失败
  • 检查 API URL 是否正确。
  • 确保网络连接正常。
  • 查看控制台错误,处理 CORS 或服务器问题。
  • 中文乱码
  • 确认 API 返回 UTF-8 编码。
  • 检查 public/index.html<meta charset="UTF-8">
  • 数据不更新
  • 确保使用 setStateuseState 正确更新状态。
  • 检查 useEffect 依赖数组是否正确。
  • 项目无法运行
  • 清理缓存并重新安装:
    bash rm -rf node_modules package-lock.json npm install npm start

9. 获取途径

  • React:通过 npm 免费安装,访问 react.dev.
  • axios:通过 npm 安装,访问 axios-http.com.
  • VSCode:可通过 grok.comx.com、VSCode iOS/Android 应用免费使用(有限额)。付费订阅(如 SuperGrok)提供更高配额,详情见 x.ai/grok.
  • Node.js:免费下载,访问 nodejs.org.

如需更复杂的 AJAX 示例(如分页、实时搜索)或进一步指导,请提供具体需求!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注