react装饰器与高阶组件及简单样式修改的操作详解

 更新时间:2022年09月24日 08:32:26   作者:勇敢*牛牛  
这篇文章主要介绍了react装饰器与高阶组件及简单样式修改的操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

使用装饰器调用

装饰器 用来装饰类的,可以增强类,在不修改类的内部的源码的同时,增强它的能力(属性或方法)

装饰器使用@函数名写法,对类进行装饰,目前在js中还是提案,使用需要配置相关兼容代码库。

react脚手架创建的项目默认是不支持装饰器,需要手动安装相关模块和添加配置文件

💥安装相关模块

yarn add -D customize-cra react-app-rewired  @babel/plugin-proposal-decorators

💥修改package.json文件中scripts命令

"scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject"
  }

💥在项目根目录中添加config-overrides.js配置文件

此文件可以理解为就是webpack.config.js的扩展文件

const { resolve } = require('path')
const { addDecoratorsLegacy, override } = require('customize-cra')
// 增强自定义给webpack添加相关配置
const custom = () => config => {
  config.resolve.alias['@'] = resolve('./src')
  return config
}
module.exports = override(addDecoratorsLegacy(), custom())

一般加上这个就行:

// 增量配置当前项目中的webpack配置,建议在react18中不要用
// 建议在react18中也不要用装饰器
// override 方法,如果webpack中有此配置则,覆盖,如果没有则添加
const { addDecoratorsLegacy, override } = require('customize-cra')
// 追加上一个装饰器
module.exports = override(addDecoratorsLegacy())

装饰器的使用

装饰类

装饰函数,在装饰时它没有写小括号,target它就是当前你装饰的类

添加静态方法/属性:

不是成员方法

const handle = target =>{
    target.run = ()=>{
        console.log("run");
    }
}
@handle
class Demo {};
const d = new Demo();
Demo.run();

添加成员方法/属性:

const handle = target =>{
    target.prototype.run = ()=>{
        console.log("run");
    }
}
@handle
class Demo {};
const d = new Demo();
d.run();

装饰器加上了小括号,则定义函数时一定要返回一个新函数

const handle = (msg) => target =>{
    target.prototype.run = ()=>{
        console.log("run",msg);
    }
}
@handle("我爱你")
class Demo {};
const d = new Demo();
d.run();

装饰成员属性

装饰器装饰成员属性,装饰时没有写小括号

装饰器装饰成员属性,装饰时没有写小括号
target 装饰的类的实例 new Demo  this
key 当前的成员属性名称  username
description 就是当前属性在对象中它的描述 Object.defineProperty
const handle = (target, key, description) => {
  // 设置当前属性为只读属性
  // description.writable = false
  console.log(target, key, description)
}
class Demo {
  @handle
  username = 'abc'
}

高阶组件

定义高阶组件,用来进行全局布局

1.它就是一个函数

2.参数首字母大写,因为你传入的是一个组件,在react中组件的调用必须首字母大写

3.返回一个组件

简单的样式修改

一、没有使用cssModule时,只能直接导入

import './style.css'
<div className="todo-title">任务列表</div>

注意手动添加标识符

例如:

.todo-title {
  color: red;
}

二、 在react中create-react-app工程,它内置了cssModule功能,但是文件后缀一定要有xxx.module.css/scss

如果有scss文件,必须得安装yarn add sass

import styles from './style.module.css'

引用:

<div className={styles.title}>任务列表</div>
<span className={done ? style.title : ''}>{title}</span>

到此这篇关于react装饰器与高阶组件及简单样式修改的操作详解的文章就介绍到这了,更多相关react装饰器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • React-intl 实现多语言的示例代码

    React-intl 实现多语言的示例代码

    本篇文章主要介绍了React-intl 实现多语言的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • react项目升级报错,babel报错,.babelrc配置兼容等问题及解决

    react项目升级报错,babel报错,.babelrc配置兼容等问题及解决

    这篇文章主要介绍了react项目升级报错,babel报错,.babelrc配置兼容等问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 解决React报错Cannot find namespace context

    解决React报错Cannot find namespace context

    这篇文章主要为大家介绍了React报错Cannot find namespace context分析解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 浅谈React多个setState会调用几次

    浅谈React多个setState会调用几次

    在React的生命周期钩子和合成事件中,多次执行setState,会被调用几次,本文就详细的介绍一下,感兴趣的可以了解一下
    2021-11-11
  • React Native性能优化红宝书方案详解

    React Native性能优化红宝书方案详解

    React Native 是Facebook在React.js Conf2015推出的开源框架,使用React和应用平台的原生功能来构建Android和iOS应用,这篇文章主要介绍了React Native性能优化红宝书,需要的朋友可以参考下
    2024-06-06
  • 详解React组件卸载怎么中止递归方法

    详解React组件卸载怎么中止递归方法

    最近在处理项目代码的时候,出现了一个bug,组件中的方法在组件卸载后仍然在执行,代码片段发给我看,但是变量的用意我也不懂,只看到有方法调用自身方法,这不就是递归嘛,所以本文详细给大家介绍了React组件卸载怎么中止递归方法,需要的朋友可以参考下
    2024-01-01
  • React如何通过@craco/craco代理接口

    React如何通过@craco/craco代理接口

    这篇文章主要介绍了React如何通过@craco/craco代理接口问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 浅谈react前后端同构渲染

    浅谈react前后端同构渲染

    本篇文章主要介绍了浅谈react前后端同构渲染,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • React DOM-diff 节点源码解析

    React DOM-diff 节点源码解析

    这篇文章主要为大家介绍了React DOM-diff节点源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 利用ES6语法重构React组件详解

    利用ES6语法重构React组件详解

    这篇文章主要介绍了利用ES6语法重构React组件的相关资料,文中通过示例代码介绍的很详细,对大家具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧。
    2017-03-03

最新评论