使用React高阶组件

高阶组件个人理解其实就是抽离公共逻辑 ,高阶组件英语全称为 Higher-Order Components,简称 HOC,所谓高阶组件,是 React中一种复用逻辑的技巧。高阶组件是一个函数,高阶组件作为一个函数,接收你传入的组件,然后又返回一个新组件给你

简单示例:比如说现在有个餐厅,餐厅有固定餐牌,客人点了什么直接输入序列号,餐厅获取客人的餐桌号和点的餐单等信息,价钱也不一样

高阶组件

javascript 复制代码
// withTimer
export default function withInfo (Com) {
  return function NewCom(props) {
    // 必须传序列号,对应的是菜品
    if(!props.serial) {
      return new Error('请传入序列号')
    }
    // 这个可以是后台返回的数据
    const foodMenu = [
      {
        id: 1,
        food: '辣椒炒肉'
      },
      {
        id: 2,
        food: '青椒炒蛋'
      },
      {
        id: 3,
        food: '苦瓜炒肉'
      }
    ]
    const dotMenu = foodMenu.filter(item => item.id === props.serial)
    let backMenu = {
      ...props
    }
    if(dotMenu && dotMenu.length > 0) {
      backMenu.food = dotMenu[0].food
    }
    return <Com {...backMenu} />
  }
}

父组件

javascript 复制代码
import React from 'react'
import withInfo from './HOC/withInfo'
import ChildCom3 from './components/ChildCom3'
import ChildCom4 from './components/ChildCom4'
const NewChildCom3 = withInfo(ChildCom3)
const NewChildCom4 = withInfo(ChildCom4)
export default function MyHocStudy() {
  const client = [
    {
      userId: 1,
      name: '张三',
      serial: 1,
      table: 3
    },
    {
      userId: 1,
      name: '李四',
      serial: 3,
      table: 2
    }
  ]
  return (
    <div>
      <NewChildCom3 {...client[0]} />
      <NewChildCom4 {...client[1]} />
    </div>
  )
}

子组件1

javascript 复制代码
import React from 'react'
export default function ChildCom3(props) {
  console.log('cm3', props);
  return (
    <div>
      <h3>ChildCom3-这是在包间-服务等不一样</h3>
      <div>
        <div>餐品: {props.food}</div>
      </div>
    </div>
  )
}

子组件2

javascript 复制代码
import React from 'react'
export default function ChildCom3(props) {
  console.log('cm4', props);
  return (
    <div>
      <h3>ChildCom4-这是在大厅-服务等不一样</h3>
      <div>
        <div>餐品: {props.food}</div>
      </div>
    </div>
  )
}
相关推荐
Setsuna_F_Seiei3 小时前
前端转型 Agent 开发 04 之 MCP 与 Skill(赋予 Agent 更广工作能力)
前端·agent
刘发财4 小时前
前端2秒生成500页矢量PDF,rust真的强到没朋友
前端·javascript·rust
lsswear5 小时前
Python 并发 线程
开发语言·python
郑州光合科技余经理5 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
软件课代表CiCi5 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
梦想平凡5 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
Ivanqhz5 小时前
MLIR OpBuilder
开发语言·python·mlir
yume_sibai6 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
红宝村村长7 小时前
windows笔记本双系统ubuntu设置
开发语言
计算机魔术师8 小时前
特朗普上台打给黄仁勋:AI末日论是骗局,我们绝不让它发生
前端