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 相关文章推荐
jquery获取URL中参数解决中文乱码问题的两种方法
Dec 18 Javascript
jquery浏览器滚动加载技术实现方案
Jun 03 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
Aug 24 Javascript
Jquery 分页插件之Jquery Pagination
Aug 25 Javascript
json+jQuery实现的无限级树形菜单效果代码
Aug 27 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
Jun 21 Javascript
JavaScript原生节点操作小结
Jan 17 Javascript
node+express+ejs使用模版引擎做的一个示例demo
Sep 18 Javascript
JS删除数组里的某个元素方法
Feb 03 Javascript
ndm:NPM的桌面GUI应用程序
Oct 15 Javascript
js实现图片推拉门效果代码实例
May 18 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
Dec 29 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的PHP目录管理函数库
2008/07/10 PHP
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
浅析php单例模式
2014/11/25 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
Python实现的简单发送邮件脚本分享
2014/11/07 Python
python实现的简单抽奖系统实例
2015/05/22 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
详解python tkinter模块安装过程
2020/01/06 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
道路建设实施方案
2014/03/18 职场文书
2015中学学校工作总结
2015/07/20 职场文书