17.HOC及CRA中装饰器模式 末蓝、 2023-10-11 16:26 17阅读 0赞 > 扩展 [函数式编程][Link 1] > HOC:高阶组件 \--新demo-- #### 封装头部尾部为父组件 #### 1.项目目录 - src - layout - indexLayout - Footers.js #尾部 - Headers.js #头部 - index.js #作为导出组件 - App.js - index.js 2.`src/layout/indexLayout/Footers.js` /** * 底部 */ import React, {Component} from 'react'; class Footers extends Component { render() { return ( <div> ©2020 __疯子__demo </div> ); } } export default Footers; 3.`src/layout/indexLayout/Headers.js` /** * 头部 */ import React, {Component} from 'react'; class Headers extends Component { render() { return ( <div> <a href="/">首页</a> </div> ); } } export default Headers; 4.`src/layout/indexLayout/index.js` import React, {Component} from 'react'; import Headers from './Headers' import Footers from './Footers' /** * 父组件 * @param ContentComponent 自定义组件(在此项目中ContentComponent表示中间部分) */ const indexLayout=(ContentComponent)=>{ return class Index extends Component { render() { return ( <> <Headers/> <ContentComponent/> <Footers/> </> ); } } }; export default indexLayout 5.`src/App.js` import React, {Component} from 'react'; import indexLayout from './layout/indexLayout' class App extends Component { render() { return ( <div> App </div> ); } } //在此调用的是indexLayout函数,并把App组件作为参数向下传递 export default indexLayout(App); 6.`src/index.js` import React from 'react' import {render} from 'react-dom' import App from './App' render( <App/>, document.getElementById("root") ); 7.参数传递 7.1.`src/index.js` render( <App name="张三"/>, //#update 修改 document.getElementById("root") ); 7.2.`src/App.js` render() { return ( <div> App {this.props.name} //#update 修改 </div> ); } 7.3.`src/layout/indexLayout/index.js` render() { return ( <> <Headers/> <ContentComponent {...this.props}/> //#update 修改 <Footers/> </> ); } * 7.3.这个步骤是必须步骤,需要把当前所接收到的`props`进行解构并向下传递 -------------------- 让cra支持@装饰器写法 1.不管你是要配置什么,我们最好的方式是使用`creat-app-rewired`这个包来对`cra`创建的项目进行轻微的配置调整 `cnpm i -D customize-cra` `cnpm i -D react-app-rewired` 使用`addDecoratorsLegacy`(装饰器)需要安装一个插件`@babel/plugin-proposal-decorators` `cnpm i -D @babel/plugin-proposal-decorators` 2.安装好之后,在`package.json`里把`scripts`里的`react-scripts`替换为`react-app-rewired` "scripts": { "start": "react-app-rewired start", //#update "build": "react-app-rewired build", //#update "test": "react-app-rewired test", //#update "eject": "react-scripts eject" }, 3.在根目录创建一个`config-overrides.js` module.exports=(config)=>{ //如果没有使用customize-cra就在这里对config进行配置 return config } 4.当然如果想要配置更方便,可以再安装`customize-cra`,然后把`config-overrides.js`改成这样 // 参考配置连接:https://www.npmjs.com/package/customize-cra const {override,addDecoratorsLegacy}=require("customize-cra"); module.exports=override( addDecoratorsLegacy(),//配置装饰器模式 ); 修改`src/App.js`文件 @indexLayout //#insert 新增 class App extends Component { render() { return ( <div> App {this.props.name} </div> ); } } //在此调用的是indexLayout函数,并把App组件作为参数向下传递 // export default indexLayout(App); //#remove 删除 export default App; `@indexLayout`这种写法以后会经常使用,例如:`@withRouter`控制路由 `vue的生态比较官方化,react的生态比较社区化` [Link 1]: https://links.jianshu.com/go?to=https%3A%2F%2Fllh911001.gitbooks.io%2Fmostly-adequate-guide-chinese%2Fcontent
相关 17.HOC及CRA中装饰器模式 > 扩展 [函数式编程][Link 1] > HOC:高阶组件 \--新demo-- 封装头部尾部为父组件 1.项目目录 - src - la 末蓝、/ 2023年10月11日 16:26/ 0 赞/ 18 阅读
相关 装饰器模式 装饰器模式 <?php class BaseArticle{ protected $art = null; protected 我会带着你远行/ 2022年07月21日 01:28/ 0 赞/ 215 阅读
相关 装饰器模式 1 <?php 2 //装饰器模式-在不改变原有类的结构上,对类的功能那个作补充 3 4 //武器基类 5 abstract 秒速五厘米/ 2022年06月16日 00:00/ 0 赞/ 199 阅读
相关 装饰器模式 在学装饰器模式的时候,我想到了责任链模式中的级别这个概念,为什么这么说,在一个OA系统中我们会有不同级别(或者说权限范围不同)的管理员,首先我们要明确不同级别的管理员它也是管理 深碍√TFBOYSˉ_/ 2022年05月08日 06:14/ 0 赞/ 221 阅读
相关 装饰器模式 1、初识装饰器模式 装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。其结构图如下: ![watermark_type_ZmFuZ3poZW 小鱼儿/ 2022年04月24日 08:50/ 0 赞/ 248 阅读
相关 装饰器模式 ![Fpm6gbuGrUYHxqlnbEc-syPtY1Y3][] 什么是装饰器? 装饰器设计模式 > 装饰器模式(Decorator Pattern)允许向一个现有 ╰半橙微兮°/ 2022年04月21日 22:36/ 0 赞/ 237 阅读
相关 装饰器模式 一、基类 ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] /----------------------- £神魔★判官ぃ/ 2021年09月30日 08:42/ 0 赞/ 369 阅读
相关 装饰器模式 7.装饰器模式 ![70][] ![70 1][] class Program { static void Main( 拼搏现实的明天。/ 2021年09月16日 23:56/ 0 赞/ 336 阅读
相关 装饰器模式 ![5057999-ef364c6262961125.png][] image.png 意图: 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模 超、凢脫俗/ 2021年09月12日 02:16/ 0 赞/ 376 阅读
相关 装饰器模式 饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种... 小灰灰/ 2020年06月13日 05:56/ 0 赞/ 771 阅读
还没有评论,来说两句吧...