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 相关文章推荐
一个收集图片的bookmarlet(js 刷新页面中的图片)
May 27 Javascript
收集json解析的四种方法分享
Jan 17 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
Aug 07 Javascript
js实现继承的5种方式
Dec 01 Javascript
详解Javascript继承的实现
Mar 25 Javascript
JS实现输入框提示文字点击时消失效果
Jul 19 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
Aug 01 Javascript
javascript验证手机号和实现星号(*)代替实例
Aug 16 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
关于微信小程序bug记录与解决方法
Aug 15 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
Nov 30 Javascript
vue prop属性传值与传引用示例
Nov 13 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
php5.2时间相差8小时
2007/01/15 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
调试php程序的简单步骤
2019/10/04 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
初学Python函数的笔记整理
2015/04/07 Python
python数据结构之图的实现方法
2015/07/08 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
Python中os模块功能与用法详解
2020/02/26 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
python自动化办公操作PPT的实现
2021/02/05 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
介绍一下Java中的static关键字
2012/05/12 面试题
高校教师思想汇报
2014/01/11 职场文书
物业总经理岗位职责
2014/02/28 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
活动总结报告怎么写
2014/07/03 职场文书
单位委托书格式范本
2014/09/29 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
感恩节寄语2015
2015/03/24 职场文书
反邪教学习心得体会
2016/01/15 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
Python使用DFA算法过滤内容敏感词
2022/04/22 Python
Redis 限流器
2022/05/15 Redis