day14: 模组化好的写法 -单一功能原则(2)

接续前一天的单一功能原则,我们重构了 fetchUser 变成一个 customer hook , useFetchAPI,那我们现在来引入看看,也接着来重构剩下的部分。

  • fetchUser 取资料
  • updataUserData
  • updateUserError
  • popup 呈现
  • 资料呈现
// Profile.jsx
import {useEffect, useCallback ,useState} from 'react';
import useFetchAPI from './useFetchAPI';

const Profile = ()=>{
	const {data,error} = useFetchAPI('https:www.fakeapi.cpm/login');
	
	return (
			<div>
					{Object.keys(userData).length > 0 &&
					<>
						<div>Name:{userData.name}</div>
						<div>Name:{userData.email}</div>
						<div>Name:{userData.phone}</div>
					</>
					}
					{userError && <div>{userError}</div>}
       </div>)

}

export default Profile;

在我们引用完 useFetchAPI 後,我们可以发现,是不是 fetch api 的事情只要交给 useFetchAPI,另外 updataUserData 和 updateUserError 的管理因为封装在 useFetchAPI 里,所以这两个部分也同时在 useFetchAPI 去维持他们的功能。所以 updataUserData 和 updateUserError 也重构完毕。

另外针对 popup 的部分,我们可以把它封装成一个叫 PopUp component,这样不论传入任何资料都适用,并且可以控制他开关。

// Popup component

const Popup = (isOpen,message)=>{
	return isOpen? <div>{message}</div> :null;
}

export default Popup;
// Profile.jsx
import {useEffect, useCallback ,useState} from 'react';
import useFetchAPI from './useFetchAPI';
import Popup from './Popup';

const Profile = ()=>{
	const {data,error} = useFetchAPI('https:www.fakeapi.cpm/login');
	
	return (
			<div>
					{Object.keys(userData).length > 0 &&
					<>
						<div>Name:{userData.name}</div>
						<div>Name:{userData.email}</div>
						<div>Name:{userData.phone}</div>
					</>
					}
					<Popup isOpen={!!error} message={error} />
       </div>
	)

}

export default Profile;

另外资料的部分也可以直接用 useFetchAPI 得到的 data 来呈现。

// Profile.jsx
import {useEffect, useCallback ,useState} from 'react';
import useFetchAPI from './useFetchAPI';
import Popup from './Popup';

const Profile = ()=>{
	const {data,error} = useFetchAPI('https:www.fakeapi.cpm/login');
	
	return (
			<div>
					{Object.keys(data).length > 0 &&
					<>
						<div>Name:{userData.name}</div>
						<div>Name:{userData.email}</div>
						<div>Name:{userData.phone}</div>
					</>
					}
					<Popup isOpen={!!error} message={error} />
       </div>
	)

}

export default Profile;

这样重构完事不是很简洁,也很方便找错误。


<<:  Day16:请说出暗号证明你的身份

>>:  [Day 16] Sass - Booleans

DAY16:Pytorch transforms(上)

torchvision.transforms transforms可以用来改变样本的多样性,例如:旋...

Youtube Analytics API 教学  -  期待多元性别出现 'gender' 维度

「鲑鱼均,因为一场鲑鱼之乱被主管称为鲑鱼世代,广义来说以年龄和脸蛋分类的话这应该算是一种 KNN 的...

D11-用 Swift 和公开资讯,打造投资理财的 Apps { 台股申购实作.4 - 用 Calendar 物件处理台湾的民国年}

股票申购是和时间有关的 feature,所以需要有一个 DateUtility,这个类别负责所有 D...

D25-(9/25)-群创(3481)-面板族群

注:发文日和截图的日期不一定是同一天,所以价格计算上和当日不同,是很正常的。 声明:这一系列文章并无...

Day 7: Docker 介绍与安装

Docker 发展之路 过去什麽都没有的黑暗时代,所有的Application都是直接放在服务器上的...