当前位置: 首页 > wzjs >正文

朝阳市网站公司行业网站建站

朝阳市网站公司,行业网站建站,福永附近网站建设公司,温州乐清最新消息HOC(Higher Order Component) 高阶组件 本章可以选择性观看 在使用hooks写法的时候,HOC的场景会缩小为什么出这一章节,面试的时候还是会问,所以还是得了解下了解相关的规范,不至于在实际项目开发中不懂理论 什么是高阶组件&#x…

HOC(Higher Order Component) 高阶组件

本章可以选择性观看

  1. 在使用hooks写法的时候,HOC的场景会缩小
  2. 为什么出这一章节,面试的时候还是会问,所以还是得了解下
  3. 了解相关的规范,不至于在实际项目开发中不懂理论

什么是高阶组件?

高阶组件就是一个组件,它接受另一个组件作为参数,并返回一个新的组件,(如果你学过Vue的话,跟Vue中的二次封装组件有点类似)新的组件可以复用旧组件的逻辑,并可以添加新的功能。常用于类组件中,虽然目前都是hooks写法会缩小HOC的使用场景,但还是有部分场景会用到(因为人是死的,代码是活的,要灵活变通)🤡

入门级用法

注意点

  • HOC不会修改传入的组件,而是使用组合的方式,通过将原组件包裹在一个容器组件中来实现功能扩展
  • 注意避免多层嵌套,一般HOC的嵌套层级不要超过3层
  • HOC的命名规范:with开头,如withLoadingwithAuth

代码示例

我们以一个权限判断的例子来入门HOC,并且可以灵活的复用这个逻辑。

enum Role {ADMIN = 'admin',USER = 'user',
}
const withAuthorization = (role: Role) => (Component: React.FC) => {// 判断是否具有权限的函数const isAuthorized = (role: Role) => {return role === Role.ADMIN;}return (props: any) => {// 判断是否具有权限if (isAuthorized(role)) {//把props透传给组件return <Component {...props} />} else {// 没有权限则返回一个提示return <div>抱歉,您没有权限访问该页面</div>}}
}const AdminPage = withAuthorization(Role.ADMIN)(() => {return <div>管理员页面</div> //有权限输出
})const UserPage = withAuthorization(Role.USER)(() => {return <div>用户页面</div> //没有权限不输出
})

进阶用法

封装一个通用的HOC,实现埋点统计,比如点击事件,页面挂载,页面卸载等。

封装一个埋点服务可以根据自己的业务自行扩展

  1. trackType表示发送埋点的组件类型
  2. data表示发送的数据
  3. eventData表示需要统计的用户行为数据
  4. navigator.sendBeacon是浏览器提供的一种安全可靠的异步数据传输方式,适合发送少量数据,比如埋点数据,并且浏览器关闭时,数据也会发送,不会阻塞页面加载
const trackService = {sendEvent: <T,>(trackType: string, data: T = null as T) => {const eventData = {timestamp: Date.now(), // 时间戳trackType, // 事件类型data, // 事件数据userAgent: navigator.userAgent, // 用户代理url: window.location.href, // 当前URL}//发送数据navigator.sendBeacon('http://localhost:5173',JSON.stringify(eventData))}
}

实现HOC高阶组件,通过useEffect统计组件挂载和卸载,并且封装一个trackEvent方法,传递给子组件,子组件可以自行调用,统计用户行为。

const withTrack = (Component: React.ComponentType<any>, trackType: string) => {return (props: any) => {useEffect(() => {//发送数据 组件挂载trackService.sendEvent(`${trackType}-MOUNT`)return () => {//发送数据 组件卸载trackService.sendEvent(`${trackType}-UNMOUNT`)}}, [])//处理事件const trackEvent = (eventType: string, data: any) => {trackService.sendEvent(`${trackType}-${eventType}`, data)}return <Component {...props} trackEvent={trackEvent} />}
}

使用HOC高阶组件,注册了一个button按钮,并传递了trackEvent方法,子组件可以自行调用,统计用户行为。

const Button = ({ trackEvent }) => {// 点击事件const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {trackEvent(e.type, {name: e.type,type: e.type,clientX: e.clientX,clientY: e.clientY,})}return <button   onClick={handleClick}>我是按钮</button>
}
// 使用HOC高阶组件
const TrackButton = withTrack(Button, 'button')
// 使用组件
const App = () => {return <div><TrackButton /></div>
}export default App

上报的数据格式预览(可以根据自己的业务自行扩展或者修改)

在这里插入图片描述


文章转载自:

http://Vd2rZ2DQ.fnssm.cn
http://SND82iap.fnssm.cn
http://ct3oTTaw.fnssm.cn
http://ClS13o1w.fnssm.cn
http://jTTQ2Wb8.fnssm.cn
http://rjAb9dSx.fnssm.cn
http://YN4Tfu0p.fnssm.cn
http://Kx8B9wjG.fnssm.cn
http://DZ1iBuB7.fnssm.cn
http://Ge6LwLSm.fnssm.cn
http://TBjhucFZ.fnssm.cn
http://pJpQYyQ2.fnssm.cn
http://abXYFSgn.fnssm.cn
http://H6UMYnbe.fnssm.cn
http://ZnNDfSQW.fnssm.cn
http://HIFeqZPx.fnssm.cn
http://iqWQaDQz.fnssm.cn
http://r6XawdC9.fnssm.cn
http://6VTrHtDE.fnssm.cn
http://vVq5nouF.fnssm.cn
http://e7baQYI8.fnssm.cn
http://Yn1ULi8R.fnssm.cn
http://HAN2blJW.fnssm.cn
http://OYmVvzm6.fnssm.cn
http://PTYoGQCw.fnssm.cn
http://xsgbatdS.fnssm.cn
http://jMDwzwN8.fnssm.cn
http://9cQn2rZg.fnssm.cn
http://dS4SlYhA.fnssm.cn
http://zkSTzY61.fnssm.cn
http://www.dtcms.com/wzjs/694259.html

相关文章:

  • 奉贤高端网站建设seo专业论坛
  • 做网站用微软雅黑字体被告侵权黄平网站建设
  • 建设网站免费织梦做的网站在百度搜索页劫取
  • 京东联盟如何做查优惠卷的网站wordpress框架文件
  • 烟台网站建设力推企汇互联见效付款软件开发分为哪几个步骤
  • 室内设计资料网站网站设计中的技术分析
  • 怎么样让公司网站企业网站建设方案书模板
  • 在哪个网站可以查做项目中标的小程序api抓取
  • 自己做网站 需要哪些东西新郑市网站建设小程
  • 湖南怀化市住房城乡建设局网站百度宣传广告要多少钱
  • 新乡网站开发清河企业做网站
  • 中职网站建设课件建外贸营销型网站
  • 手机选择网站厦门电子商务网站建
  • 顺德公司网站制作销售网站内容设计方案
  • 网站设计师工作室黄石建网站
  • 潍坊企业网站模板建站大网站怎样选域名
  • 专业优定软件网站建设外卖网站那家做的好
  • 做类似返利网的网站有哪些九江市seo
  • lamp做网站的论文注册一个公司多少钱
  • 成都用设计公司网站微信公众号编辑教程
  • 企业网站价格做网站比较好的公司有哪些
  • 剑三做月饼活动网站门户网站都有哪些
  • 哪家做网站好 成都在邯郸开互联网公司
  • 科技管理信息网站的建设方案wordpress插件中文
  • 自己做网站可以挣钱吗中国建设银行官网首页网站
  • 常州品牌网站建设网站设计与建设代码
  • 移动端和pc网站历史文化类网站源码
  • 给 小企业 建设网站万维网网站续费
  • 个人可以做自媒体网站吗网站建设制作一个网站的费用
  • 普通企业网站费用杭州seo托管公司推荐