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 相关文章推荐
驱动事件的addEvent.js代码
Mar 27 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
May 14 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
Apr 02 Javascript
javascript跨域的4种方法和原理详解
Apr 08 Javascript
浅谈JS原型对象和原型链
Mar 02 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
Vue 拦截器对token过期处理方法
Jan 23 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
Sep 21 Javascript
Javascript 实现 Excel 导入生成图表功能
Oct 22 Javascript
微信小程序实现点击效果
Jun 21 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
Feb 03 Javascript
JavaScript获取URL参数的方法分享
Apr 07 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
一个php作的文本留言本的例子(二)
2006/10/09 PHP
php实现中文转数字
2016/02/18 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
JObj预览一个JS的框架
2008/03/13 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
vue resource发送请求的几种方式
2019/09/30 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
python装饰器代替set get方法实例
2019/12/19 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
zooplus意大利:在线宠物商店
2019/08/07 全球购物
过滤器的用法
2013/10/08 面试题
写好自荐信的几个要点
2013/12/26 职场文书
大学班长的职责
2014/01/27 职场文书
班级入场式解说词
2014/02/01 职场文书
普罗米修斯教学反思
2014/02/06 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书