欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > react项目中当组件渲染的时候如何执行接口

react项目中当组件渲染的时候如何执行接口

2025/3/29 6:35:21 来源:https://blog.csdn.net/weixin_46541579/article/details/146514987  浏览:    关键词:react项目中当组件渲染的时候如何执行接口

最近遇到一个场景,就是组件渲染的时候去调用接口进行数据回填。这个在vue中很简单,在created生命周期函数中,直接调用接口即可。但是react没有created生命周期,所以在react中我们需要用到useEffect钩子函数。

在 React 函数组件中使用useEffect时,要注意依赖项数组。如果依赖项数组为空 ,则 useEffect只会在组件挂载和卸载时执行;如果依赖项数组中有值,当这些值发生变化时,useEffect会重新执行。

副作用函数的概念:在 React 中,组件的主要职责是根据输入的props和state渲染 UI。但在实际应用中,我们常常需要执行一些与渲染无关的操作,比如数据获取、订阅事件、手动修改 DOM 等,这些操作就被称为副作用 。useEffect允许在函数组件中执行这些副作用操作。

在类组件中可以使用componentDidMount生命周期函数实现相同效果。

useEffect

import React, { useEffect, useState } from 'react';// 模拟接口数据
const mockData = [{id: 1,title: '标题1111',body: 'qqqqqqq'},{id: 2,title: '标题222',body: 'wwwwww'},];// 封装模拟请求方法
const mockFetchData = () => {return new Promise((resolve) => {// 模拟请求耗时 1 秒setTimeout(() => {resolve(mockData);}, 1000);});
};function App() {// 使用 useState 来存储从模拟接口获取的数据const [data, setData] = useState([]);// 使用 useState 来存储加载状态const [isLoading, setIsLoading] = useState(true);// 使用 useState 来存储错误信息const [error, setError] = useState(null);useEffect(() => {const fetchData = async () => {try {// 调用模拟请求方法const response = await mockFetchData();// 将模拟响应数据存储到 state 中setData(response);} catch (err) {// 如果模拟请求出错,将错误信息存储到 state 中setError(err.message);} finally {// 请求完成后,将加载状态设置为 falsesetIsLoading(false);}};// 调用 fetchData 函数fetchData();}, []);if (isLoading) {// 如果正在加载,显示加载提示return <div>Loading...</div>;}if (error) {// 如果出现错误,显示错误信息return <div>Error: {error}</div>;}return (<div className="App">{/* 遍历渲染数据 */}<ul>{data.map(post => (<li key={post.id}><h2>{post.title}</h2><p>{post.body}</p></li>))}</ul></div>);
}export default App;

运行效果:

componentDidMount生命周期函数

 

import React from 'react';// 模拟接口数据
const mockData = [{id: 1,title: '类组件',body: 'qqqqqqq'},{id: 2,title: '使用componentDidMount生命周期函数在组件渲染的时候获取数据',body: 'wwwwww'},
];// 封装模拟请求方法
const mockFetchData = () => {return new Promise((resolve) => {// 模拟请求耗时 1 秒setTimeout(() => {resolve(mockData);}, 1000);});
};class App extends React.Component {// 类组件在构造函数中初始化数据constructor(props) {super(props);// 初始化状态this.state = {data: [],isLoading: true,error: null};}
// 该方法在组件挂载到 DOM 后立即调用,在这个方法里调用 fetchData 函数来获取数据,
// 这类似于函数组件中 useEffect 传入空依赖数组的情况componentDidMount() {// 在组件挂载后调用数据获取函数this.fetchData();}fetchData = async () => {try {// 调用模拟请求方法const response = await mockFetchData();// 将模拟响应数据存储到 state 中this.setState({ data: response });} catch (err) {// 如果模拟请求出错,将错误信息存储到 state 中this.setState({ error: err.message });} finally {// 请求完成后,将加载状态设置为 falsethis.setState({ isLoading: false });}}render() {const { data, isLoading, error } = this.state;if (isLoading) {// 如果正在加载,显示加载提示return <div>Loading...</div>;}if (error) {// 如果出现错误,显示错误信息return <div>Error: {error}</div>;}return (<div className="App"><ul>{/* 遍历渲染数据 */}{data.map(post => (<li key={post.id}><h2>{post.title}</h2><p>{post.body}</p></li>))}</ul></div>);}
}export default App;

end 

如有误,不足欢迎指正补充。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词