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 - HTML的request类
Jan 09 Javascript
jquery tablesorter.js 支持中文表格排序改进
Dec 09 Javascript
javascript中indexOf技术详解
May 07 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
May 25 Javascript
D3.js中data(), enter() 和 exit()的问题详解
Aug 17 Javascript
简单解析JavaScript中的__proto__属性
May 10 Javascript
javascript宿主对象之window.navigator详解
Sep 07 Javascript
jquery如何实现点击空白处隐藏元素
Dec 05 jQuery
Vue 中使用vue2-highcharts实现曲线数据展示的方法
Mar 05 Javascript
在Vue methods中调用filters里的过滤器实例
Aug 30 Javascript
vue实现在v-html的html字符串中绑定事件
Oct 28 Javascript
JavaScript实现点击图片换背景
Nov 20 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初始化对象和析构函数的简单实例
2014/03/11 PHP
php数组转成json格式的方法
2015/03/09 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
php 可变函数使用小结
2018/06/12 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
JS中操作JSON总结
2020/12/06 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
实例浅析js的this
2016/12/11 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
解决vue-cli3 使用子目录部署问题
2018/07/19 Javascript
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
js实现烟花特效
2020/03/02 Javascript
centos下更新Python版本的步骤
2013/02/12 Python
跟老齐学Python之集合的关系
2014/09/24 Python
python实现在字符串中查找子字符串的方法
2015/07/11 Python
利用Python实现图书超期提醒
2016/08/02 Python
微信跳一跳辅助python代码实现
2018/01/05 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
Python实现快速排序的方法详解
2019/10/25 Python
如何利用python读取micaps文件详解
2020/10/18 Python
python集合的新增元素方法整理
2020/12/07 Python
高考备战决心书
2014/03/11 职场文书
民主生活会剖析材料
2014/09/30 职场文书
刘公岛导游词
2015/02/05 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
新教师教学工作总结
2015/08/14 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书