reactjs - 我如何去重构我的反应应用程序
问题描述
我是 React JS 的新手。我需要重构我的反应应用程序。目前我正在对我的 Spring 后端进行 API 调用,我得到以下响应:-
"avgTime": 250.0769,
"minTime": 100.0,
"maxTime": 500.0
我目前在 Card 组件中呈现这些响应。我为每个响应创建了一个组件,即avgTime
, minTime
,maxTime
但是我API
在每个组件中都进行了相同的调用。这是一个好习惯吗?如何在这些组件中重用我的 API 调用。
反应代码: -
import React, {useState, useEffect} from 'react';
const SlowestResponse = props => {
const { className, ...rest } = props;
const classes = useStyles();
const SlowestResponse = 'http://localhost:8080/api/SlowestResponse';
const [data, setData] = useState([]);
useEffect(() => {
const fetchData = async () => {
const result = await fetch(SlowestResponse);
const jsonresponse = await result.json();
setData([jsonresponse]);
};
fetchData();
}, []);
return (
<CardContent>
<Grid
container
justify="space-between"
>
<Grid item>
<Typography
className={classes.title}
color="textSecondary"
gutterBottom
variant="body2"
>
</Typography>
<Typography variant="h3">
<ul>
{
data.map((item) => {
return <div>{item.maxTime}</div>
})
}
</ul>
</Typography>
</Grid>
</Grid>
</CardContent>
);
};
SlowestResponse.propTypes = {
className: PropTypes.string
};
export default SlowestResponse;
解决方案
您可以将您的 React 钩子逻辑导出到自定义钩子中并重用它。因为你只使用data
你只需要从你的钩子中返回它的值。
这是一个例子:
import React, {useState, useEffect} from 'react';
const useApi = () => {
const SlowestResponse = 'http://localhost:8080/api/SlowestResponse';
const [data, setData] = useState([]);
useEffect(() => {
const fetchData = async () => {
const result = await fetch(SlowestResponse);
const jsonresponse = await result.json();
setData([jsonresponse]);
};
fetchData();
}, []);
return data;
}
const SlowestResponse = props => {
const {
className,
...rest
} = props;
const classes = useStyles();
const data = useApi()
return (<CardContent>
<Grid container="container" justify="space-between">
<Grid item="item">
<Typography className={classes.title} color="textSecondary" gutterBottom="gutterBottom" variant="body2"></Typography>
<Typography variant="h3">
<ul>
{
data.map((item) => {
return <div>{item.maxTime}</div>
})
}
</ul>
</Typography>
</Grid>
</Grid>
</CardContent>);
};
SlowestResponse.propTypes = {
className: PropTypes.string
};
export default SlowestResponse;
您可以useApi
在外部文件中导出并在需要它的每个组件文件中导入它。
推荐阅读
- javascript - JavaScript NodeJS 如何将流/承诺与异步函数一起使用?
- google-cloud-platform - 关于 Google Cloud Translate API 的欧盟区域端点的说明
- node.js - Typescript - 动态类类型
- python - 如何防止 RAM 填满图像分类 (DL)
- docker-compose - Docker Compose - 无效变量
- php - 访问soap web服务生产环境的问题
- python - 如果用户输入的选项既不是 1 也不是 2,我正在尝试提示程序提供重新输入选择。它不起作用
- git - 壁球合并后,Git quick-stats 给了我错误的统计数据(在 Github 上)
- c - 不明白我是如何收到输出中的数字的?
- javascript - API 提取没有响应