react高阶组件添加和删除props


Posted in Javascript onApril 26, 2019

唠叨几句啦

在看程墨老师的深入浅出高阶组件,开头一点提了一个需要,创建两个高阶组件,一个能给传入的元素自定义添加props,一个是删除特定的props。我刚刚做了一下,发现高阶组件需要区分好传入的是class还是react element, 同时也需要注意好return回去的是啥。顺便提一下高阶组件的概念,就说一个函数,能够接受一个组件作为参数,然后返回的时候,这个组件就带有这个高阶组件给的某些特性。我理解就跟掉泥坑了,得带点土出来一个道理。

对比一下两个组件,贴代码时刻来啦

删除属性的高阶组件

我们需要传入任何组件和参数,都把user参数给删除了,所以返回值是一个接收props属性的函数。

import React from "react"

function removeUserProp(WrappedComponent) {
  return function newRender(props) {
    const {user, ...otherProps} = props;// 删除user这个属性值
    return <WrappedComponent {...otherProps} />
  }
}

export default removeUserProp

使用的时候

const RemoveComponent = removeUserProp(reactComponentClass)({user: "aa"});// 这里返回的是一个react component
 render () {
  return <div>
        {RemoveComponent}
      </div>
 }

增加属性的高阶组件

import React from "react"

const addNewProps = function (WrappedComponent, newProps) {// 接收的是一个class作为参数,返回一个class
  return class WrappingComponent extends React.Component {
    render () {
      return <WrappedComponent {...this.props} {...newProps}/>
    } 
  }
}

export default addNewProps

使用的时候,返回值是class,所以要用<ReactClassName/>转换成可以渲染的react组件

const AddUserComponent = addNewProps(SampleComponent, {user: "aa"})
  render () {
    return <AddUserComponent />
  }

完整的使用的例子代码:

import React from "react"
import addNewProps from './addNewProps'
import removeUserProp from './removeUserProp'

class SampleComponent extends React.Component {

  constructor(props) {
    console.log(props)
    super(props)
  }

  render () {
    console.log(this.props)
    return <div>
        {
         this.props.user ? <p>哈哈哈</p> : <p>哈哈哈2</p>
        }   
        </div>
  }
}


class Test extends React.Component {

  render () {
    var obj = {aa: "aa"}
    const AddUserComponent = addNewProps(SampleComponent, {user: "aa"})
    const RemoveUserComponent = removeUserProp(SampleComponent)({user: "aa"})
   
    return <div>
         <AddUserComponent />
         {RemoveUserComponent}
        </div>
    
  }
}

export default Test

一点点小收获就是明白了高阶组件要看清楚输入输出。class跟react element的区别。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript string 扩展库代码
Apr 09 Javascript
jQuery帮助之筛选查找 children([expr])
Jan 31 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
Apr 24 Javascript
判断js对象是否拥有某一个属性的js代码
Aug 16 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
Aug 05 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
Nov 09 Javascript
Three.js利用dat.GUI如何简化试验流程详解
Sep 26 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
Dec 20 Javascript
vue组件中的数据传递方法
May 14 Javascript
Javascript通过控制类名更改样式
May 24 Javascript
jquery实现垂直手风琴导航栏
Feb 18 jQuery
react国际化react-intl的使用
May 06 Javascript
详解微信小程序-canvas绘制文字实现自动换行
Apr 26 #Javascript
vue 进阶之实现父子组件间的传值
Apr 26 #Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 #Javascript
配置一个vue3.0项目的完整步骤
Apr 26 #Javascript
关于Vue源码vm.$watch()内部原理详解
Apr 26 #Javascript
JS异步错误捕获的一些事小结
Apr 26 #Javascript
原生JS实现图片懒加载之页面性能优化
Apr 26 #Javascript
You might like
第四节--构造函数和析构函数
2006/11/16 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
javascript学习笔记(十二) RegExp类型介绍
2012/06/20 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
SQLite3中文编码 Python的实现
2017/01/11 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
python 接收处理外带的参数方法
2018/12/03 Python
Python中一个for循环循环多个变量的示例
2019/07/16 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
python中字符串的编码与解码详析
2020/12/03 Python
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
劳动工资科岗位职责范本
2014/03/02 职场文书
会计电算化毕业生自荐信
2014/03/03 职场文书
超市促销活动方案
2014/03/05 职场文书
市级文明单位申报材料
2014/05/07 职场文书
三严三实心得体会范文
2014/10/13 职场文书
Pytorch可视化的几种实现方法
2021/06/10 Python
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python