资讯专栏INFORMATION COLUMN

高阶函数与高阶组件

legendmohe / 798人阅读

摘要:高阶函数基本概念函数可以作为参数被传递函数可以作为返回值输出平时遇到的应用场景中获取成功数组中和高阶组件高阶组件就是接受一个组件作为参数并返回一个新组件的函数高阶组件是一个函数,并不一个组件例子组件里面包含组件这里必须出去这是组件高阶组件的

高阶函数基本概念

1 函数可以作为参数被传递

 setTimeout(()=>{
   console.log("aaaa")
  },1000)

2 函数可以作为返回值输出

  function foo(x){
        return function(){
           return x
        }
      }

 //平时遇到的应用场景      
//ajax中
 $.get("/api/getTime",function(){
     console.log("获取成功")
  })
 //数组中
 some(), every(),filter(), map()和forEach()     
 
高阶组件

1 高阶组件就是接受一个组件作为参数并返回一个新组件的函数

2 高阶组件是一个函数,并不一个组件

例子: A组件里面包含B组件

 import React , { Component }from "react"
    function A(WrappedComponent){
     return  class A extends Component{  //这里必须retrun出去
       render() {
        return(
         
这是A组件
) } } } export default A
高阶组件的应用

传参数

import React, { Component } from "react";
import "./App.css";
import B from "./components/B"
class App extends Component {
  render() {
   return (
     
这是我的APP
); } } export default App; //A组件 import React , { Component }from "react" export default (title)=> WrappedComponent => { return class A extends Component{ render() { return(
这是A组件{title}
) } } } //B组件 import React , { Component }from "react" import A from "./A.js" class B extends Component{ render() { return(
性别:{this.props.sex} 年龄:{this.props.age} 姓名:{this.props.name}
) } } export default A("提示")(B) //有两种方式引用高阶函数,第一种入上 //第二种 import React , { Component }from "react" import a from "./A.js" @a("提示") class B extends Component{ render() { return(
性别:{this.props.sex} 年龄:{this.props.age} 姓名:{this.props.name}
) } } export default B

使用第二种方式的步骤

继承方式高阶组件的实现

   //D.js
import React from "react"
const modifyPropsHOC= (WrappedComponent) =>  class NewComponent extends WrappedComponent{
render() {
   const element = super.render();
   const newStyle = {
     color: element.type == "div"?"red":"green"
   }
   const newProps = {...this.props,style:newStyle}
   return React.cloneElement(element,newProps,element.props.children)
 }
} 
export default modifyPropsHOC


 // E.js

import React, {Component} from "react"
import D from "./D"
class E extends Component {
render(){
return (
  
我的div
); } } export default D(E) // F.js import React, {Component} from "react" import d from "./D" class F extends Component { render(){ return (

我的p

); } } export default d(F) import React, { Component } from "react"; import "./App.css"; import E from "./components/E" import F from "./components/F" class App extends Component { render() { return (
这是我的APP
); } } export default App;

修改生命周期

import React from "react"
const modifyPropsHOC= (WrappedComponent) =>  class NewComponent extends WrappedComponent{
componentWillMount(){
alert("我的修改后的生命周期");
}
render() {
   const element = super.render();
   const newStyle = {
color: element.type == "div"?"red":"green"
   }
   const newProps = {...this.props,style:newStyle}
   return React.cloneElement(element,newProps,element.props.children)
  }
}

export default modifyPropsHOC

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103680.html

相关文章

  • react进阶系列:高阶组件详解(一)

    摘要:创建一个普通函数因为的存在所以变成构造函数创建一个方法在方法中,创建一个中间实例对中间实例经过逻辑处理之后返回使用方法创建实例而恰好,高阶组件的创建逻辑与使用,与这里的方法完全一致。因为方法其实就是构造函数的高阶组件。 很多人写文章喜欢把问题复杂化,因此当我学习高阶组件的时候,查阅到的很多文章都给人一种高阶组件高深莫测的感觉。但是事实上却未必。 有一个词叫做封装。相信写代码这么久了,大...

    NervosNetwork 评论0 收藏0
  • 深入浅出React高阶组件

    摘要:博客地址背景知识在开始讲述高阶组件前,我们先来回顾高阶函数的定义接收函数作为输入,或者输出另一个函数的一类函数,被称作高阶函数。 博客地址:http://www.luckyjing.com/post... 背景知识 在开始讲述高阶组件前,我们先来回顾高阶函数的定义:接收函数作为输入,或者输出另一个函数的一类函数,被称作高阶函数。对于高阶组件,它描述的便是接受React组件作为输入,输出...

    yuanzhanghu 评论0 收藏0
  • React进阶——使用高阶组件(Higher-order Components)优化你的代码

    摘要:之所以称之为高阶,是因为在中,这种嵌套关系会反映到组件树上,层层嵌套就好像高阶函数的一样,如图从图上也可以看出,组件树虽然嵌套了多层,但是实际渲染的结构并没有改变。你可能已经注意到,目前我写的所有高阶函数,都是形如表示为。 什么是高阶组件 Higher-Order Components (HOCs) are JavaScript functions which add function...

    happyfish 评论0 收藏0
  • React高阶组件

    摘要:高阶组件高阶函数接收函数作为输入,或者输出另一个函数的一类函数高阶组件接收组件作为输入,输出一个新的组件的组件。包含了一系列实用的高阶组件库拖动库深入理解高阶组件其中详细介绍了属性代理和反向继承的区别。 React高阶组件 高阶函数: 接收函数作为输入,或者输出另一个函数的一类函数; 高阶组件: 接收React组件作为输入,输出一个新的React组件的组件。 高阶组件通过包裹一个新传入...

    cncoder 评论0 收藏0
  • 学习es7的Decorator(顺带写个react高阶组件)

    摘要:为了代码进一步解耦,可以考虑使用高阶组件这种模式。开源的高阶组件使用提供了一系列使用的高阶组件,可以增强组件的行为,可以利用此库学习高阶组件的写法。通过使用此库提供的高阶组件,可以方便地让列表元素可拖动。 1. Decorator基本知识 在很多框架和库中看到它的身影,尤其是React和Redux,还有mobx中,那什么是装饰器呢。 修饰器(Decorator)是一个函数,用来修改类的...

    xiyang 评论0 收藏0

发表评论

0条评论

legendmohe

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<