使用 React 挂钩优化服务器请求

介绍

作为一个 React 开发人员,你厌倦了与管理不良的服务器请求作斗争吗? 不要再看; React Hooks是 React 库的一个强大的功能,允许开发人员在功能组件中使用状态和其他 React 功能,可以帮助优化您的服务器请求,并将您的 Web 应用程序的性能提升到一个新的水平。

你可能会想,服务器请求有什么大问题?为什么它们很重要?好吧,让我告诉你 – 服务器请求在确定用户体验方面发挥着至关重要的作用。 管理不良的服务器请求可能会导致慢的加载时间、低的性能和令人沮丧的用户体验。

本教程将指导您如何使用 React Hooks 来提高服务器请求性能,更有效地管理服务器请求,并帮助您创建更优化的 Web 应用程序。

到本教程结束时,您将对如何使用 React Hooks 来优化服务器请求有一个坚实的了解,并能够在您的项目中实施这些技术,以提高您的Web应用程序的性能和用户体验。

前提条件:

要跟随这个教程,你应该:

此外,具有与API合作的一些经验和了解RESTful原则将是有益的。

如果你是新的优化服务器请求,不要担心 - 这个教程是针对所有经验水平的开发人员。 如果你还不熟悉这些概念,可能需要一些额外的研究和实验,但不要担心;有点耐心和实践,你将能够在短时间内掌握优化服务器请求的艺术!所以,让我们开始并提高你的React应用程序的性能。

创建一个新的React项目

创建一个新的 React 项目对于初学者来说可能是一个艰难的任务,但使用 Create React App (CRA) 工具,它从未更容易过。CRA 是一个流行的命令行界面工具,可以自动化新的 React 项目的设置过程,为构建 React 应用程序提供优化的开发环境。

是的,TR

要创建一个 React 项目,你需要在计算机上安装 Node.js 和 npm. 如果你还没有它们,你可以从 官方 Node.js 网站下载它们。一旦你安装了这些工具,打开你的终端或命令提示到你想要创建应用程序的目录,使用以下命令创建一个新的 React 项目:

1npx create-react-app digital-ocean-tutorial

如果应用程序被成功创建,则会显示以下输出:

 1...
 2Success! Created digital-ocean-tutorial at your_file_path/digital-ocean-tutorial
 3Inside that directory, you can run several commands:
 4
 5npm start
 6Starts the development server.
 7
 8npm run build
 9Bundles the app into static files for production.
10
11npm test
12Starts the test runner.
13
14npm run eject
15Removes this tool and copies build dependencies, configuration files and scripts into the app directory. If you do this, you cant go back!
16
17We suggest that you begin by typing:
18
19cd digital-ocean-tutorial
20npm start
21
22Happy hacking!

这将创建一个与您的项目相同的名称的新目录,其中包含您新 React 项目所需的所有文件。

安装过程完成后,通过运行以下命令导航到新的 React 项目目录:

1cd digital-ocean-tutorial

然后运行以下命令来启动开发服务器:

1npm start

如果一切都做得对,服务器应该开始运行,然后会显示以下输出:

1Compiled successfully!
2
3You can now view digital-ocean-tutorial in the browser
4
5http://localhost:3000
6
7Note that the development build is not optimized.
8To create a production build, use npm run build.

您现在应该能够看到一个欢迎回应消息,这意味着您的项目已正确设置,并为您准备开始构建您的下一个伟大的应用程序!

CRA default app screen

借助CRA,您将能够专注于编写代码,而无需担心设置和配置开发环境。

现在你已经启动了 React 项目,让我们看看我们可以使用 React 绑架来优化服务器请求的各种方式。

与 UseEffect Hook 同步组件

React 中的 useEffect 粘合器允许开发人员通过处理数据采集等副作用来同步组件与外部系统(如服务器)以一种既高效又易于理解的方式。

用于服务器请求的 useEffect 接口的一个方法是调用在 useEffect 接口中执行请求的函数,该函数应该使用 Fetch API或像 Axios这样的库来执行请求,然后使用 setState 接口更新组件的状态以使用响应数据。

让我们看看如何使用 useEffect 链接从 JSON 位置持有人 API 获取数据并更新组件的状态的一个示例。 进入 app.js 文件,在项目的 src 文件夹中,删除默认代码,并用下面的代码片段替换它:

 1[label /src/app.js]
 2
 3import React, { useEffect, useState } from 'react';
 4
 5function MyComponent() {
 6  const [data, setData] = useState([]);
 7  useEffect(() => {
 8    async function fetchData() {
 9      const response = await fetch('https://jsonplaceholder.typicode.com/posts');
10      const data = await response.json();
11      setData(data);
12    }
13    fetchData();
14  }, []);
15
16  return (
17    <div>
18      {data.map((item) => (
19        <div key={item.id}>
20          <h2>- {item.title}</h2>
21          <p>{item.body}</p>
22        </div>
23      ))}
24    </div>
25  );
26}
27
28export default MyComponent

在上面的示例中,使用效应链接被称为空的依赖数组,这意味着它只会在组件的初始渲染上运行。

如果您更新浏览器或应用程序,您应该能够在上面的代码样本中看到请求的结果,如下图所示:

Result of request made using useEffect

重要的是要注意,不必要的再渲染可能导致性能问题,因此最好减少使用效应链所引起的再渲染次数。

执行服务器请求时正确处理错误也很重要,以避免破坏组件。 错误处理可以通过在 fetchData 函数中添加试用区块,并使用 setError 绑架来更新组件的状态以错误消息。

通过遵循最佳实践,您可以自信地在 React 组件中执行服务器请求,并创建更好的用户体验。

优化服务器请求性能使用Memo Hook

React 中的Memo Hook 是一个性能优化工具,允许开发人员通过存储计算结果来记忆数据,以便它可以重复使用而无需重复过程。

在服务器请求背景中使用使用Memo 绑架器的一种方法是记忆从服务器返回的数据,并使用它来更新组件的状态。这可以通过在 useEffect 绑架器内呼叫使用Memo 绑架器并将服务器数据传输为第一个参数,并作为第二个参数使用依赖数。

若要尝试此方法,使用使用Memo 绑定器从 JSON 位置持有人 API 记忆数据并更新组件的状态,请在 app.js 中更换代码到下面的代码片段:

 1[label /src/app.js]
 2
 3import { useEffect, useState, useMemo } from 'react';
 4
 5function MyComponent({ postId }) {
 6  const [data, setData] = useState({});
 7  useEffect(() => {
 8    async function fetchData() {
 9      const response = await fetch(`https://jsonplaceholder.typicode.com/posts/${postId}`);
10      const data = await response.json();
11      setData(data);
12    }
13    fetchData();
14  }, [postId]);
15
16  const title = useMemo(() => data.title, [data]);
17
18  return (
19    <div>
20      <h2>{title}</h2>
21    </div>
22  );
23}
24
25export default MyComponent

在上面的示例中,使用效应链接被称为 postId 作为依赖数组,这意味着它会在 postId prop 变化时运行。组件的状态以空对象初始化,然后在使用效应链接中调用 fetchData 函数,以执行服务器请求并更新与响应数据的状态。

下面是上面的代码样本中请求的结果:

Result of request made using useMemo

请注意,使用Memo并不总是必要的,并且应该仅在组件依赖某些特性或状态时使用,可能会频繁发生变化,计算费用昂贵。

使用 Reducer Hook 管理服务器请求状态

React 中的 Reducer 链接类似于 useState 链接,但允许更复杂和可预测的状态管理。而不是直接更新状态, useReducer 允许您发送描述状态更新的操作,以及基于发送操作更新状态的 Reducer 函数。

用于服务器请求管理的 Reducer 链接的一个好处是更好的关切分离,而不是在整个组件中分散处理服务器请求的逻辑,它可以被嵌入到 Reducer 函数中,使组件的代码更容易理解和维护。

若要尝试使用 useReducer hook 来从 JSON 位置持有人 API 记忆数据并更新组件的状态,请在 app.js 中更换代码到下面的代码片段:

 1[label /src/app.js]
 2
 3import { useReducer } from 'react';
 4
 5const initialState = { data: [], loading: false, error: '' };
 6const reducer = (state, action) => {
 7  switch (action.type) {
 8    case 'FETCH_DATA_REQUEST':
 9      return { ...state, loading: true };
10    case 'FETCH_DATA_SUCCESS':
11      return { ...state, data: action.payload, loading: false };
12    case 'FETCH_DATA_FAILURE':
13      return { ...state, error: action.payload, loading: false };
14    default:
15      return state;
16  }
17};
18
19function MyComponent() {
20  const [state, dispatch] = useReducer(reducer, initialState);
21
22  const fetchData = async () => {
23    dispatch({ type: 'FETCH_DATA_REQUEST' });
24    try {
25      const response = await fetch('https://jsonplaceholder.typicode.com/posts');
26      const data = await response.json();
27      dispatch({ type: 'FETCH_DATA_SUCCESS', payload: data });
28    } catch (error) {
29      dispatch({ type: 'FETCH_DATA_FAILURE', payload: error.message });
30    }
31  };
32
33  return (
34    <div>
35      {state.loading ? (
36        <p>Loading...</p>
37      ) : state.error ? (
38        <p>{state.error}</p>
39      ) :
40        <div>
41          {state.data.map((item) => (
42            <div key={item.id}>
43              <h2>{item.title}</h2>
44              <p>{item.body}</p>
45            </div>
46          ))}
47        </div>
48      )}
49      <button onClick={fetchData}>Fetch Data</button>
50    </div>
51  );
52}
53
54export default MyComponent

在介绍的代码片段中,使用Reducer Hook 被调用为减小函数,并将初始状态传递为参数。组件的状态被初始化为数据的空数组,一个加载变量设置为 false,以及一个空错误消息变量。当点击Fetch Data按钮时,执行 fetchData 函数,该函数发送响应请求状态的操作,这可以是成功或失败。

下面是上面的代码样本中提出的请求的结果:

Result of request made using useReducer

此外,使用 Reducer Hook 可以更有效地管理复杂状态. 通过使用操作和减速器来更新状态,更容易处理各种操作对状态的不同部分的影响,从而更容易在应用程序中添加新功能和解决问题。

您可以在此 GitHub 存储库中找到使用上述方法的工作应用程序的源代码。

结论

简而言之,本教程已涵盖了使用 React Hooks 优化服务器请求的基本知识。 React Hooks 是 React 库的一个强大的功能,允许开发人员在功能组件中使用状态和其他 React 功能。使用Effect,使用Memo 和使用Reducer Hooks,您可以轻松管理和优化服务器请求,从而获得更快的加载时间,提高性能,并为您的用户提供更好的用户体验。

现在,轮到您在您的项目中尝试这些技术。作为下一步,您可以探索更多先进的主题,如 paginationcaching. 请记住,React Hooks 是一个不断发展的技术,所以保持最新更新和最佳实践,以继续优化您的服务器请求。

Published At
Categories with 技术
Tagged with
comments powered by Disqus