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实现的像java、c#之类的sleep暂停的函数代码
Mar 04 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
Jul 03 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
Feb 26 Javascript
jQuery打字效果实现方法(附demo源码下载)
Dec 18 Javascript
Vue.js系列之vue-router(上)(3)
Jan 03 Javascript
express框架实现基于Websocket建立的简易聊天室
Aug 10 Javascript
基于 Vue 的树形选择组件的示例代码
Aug 18 Javascript
vue router+vuex实现首页登录验证判断逻辑
May 17 Javascript
vue.js使用watch监听路由变化的方法
Jul 08 Javascript
JS内置对象和Math对象知识点详解
Apr 03 Javascript
JavaScript实现拖拽和缩放效果
Aug 24 Javascript
vue的项目如何打包上线
Apr 13 Vue.js
详解微信小程序-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 header函数分析详解
2011/08/06 PHP
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
javascript中length属性的探索
2011/07/31 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
理解JS绑定事件
2016/01/19 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
你真的了解Python的random模块吗?
2017/12/12 Python
Python3.4解释器用法简单示例
2019/03/22 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
Python如何读取文件中图片格式
2020/01/13 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
夜大自我鉴定
2013/10/31 职场文书
机电一体化毕业生求职信
2013/11/02 职场文书
应届生的求职推荐信范文
2013/11/30 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript