首页 > 其他分享 >React之高阶组件

React之高阶组件

时间:2022-10-19 12:05:16浏览次数:45  
标签:Wrapper React props 组件 import 高阶 ReactDom


React之高阶组件

注意:本章节运行环境在​​React项目构建​​章节之上。

文章目录

高阶组件

  1. ​let Root = props => <div>{props.schoolName}</div>;​​如果要在Root组件进行增强,例如将Root外部再加入其它div。
import React from 'react';
import ReactDom from 'react-dom';

let Wrapper = function (Component){
function _wrapper(props){
return (
<div>
{props.scholName}<hr />
<Component />
</div>
);
}
return _wrapper;
}
let Root = props => <div>Root</div>;

let NewComp = Wrapper(Root) //返回一个包装后的元素

ReactDom.render(<NewComp scholName="xdd" />,document.getElementById("root"));
  • 在_wrapper(props)中本身就是一个无状态组件,内部包囊这一个传入的组件,可以看做增强了传入的组件。传入的组件作为返回的新组件的子组件
  1. 简化高阶组件
import React from 'react';
import ReactDom from 'react-dom';

let Wrapper = Component => props => (
<div>
{props.scholName}<hr />
<Component />
</div>
);

let Root = props => <div>Root</div>;

let NewComp = Wrapper(Root) //返回一个包装后的元素

ReactDom.render(<NewComp scholName="xdd" />,document.getElementById("root"));

React之高阶组件_React之高阶组件

装饰器

  • 新版ES2016中增加了装饰器的支持,因此可以使用装饰器来改造上面的代码。
  • ES 2016的装饰器只能装饰类,不能装饰函数
import React from 'react';
import ReactDom from 'react-dom';

let Wrapper = Component => props => (
<div>
{props.scholName}<hr />
<Component />
</div>
);


@Wrapper // 等价于 A = Wrapper(A)
class A extends React.Component{
render(){
return <div>A</div>
}
}

ReactDom.render(<A scholName="B" />,document.getElementById("root"));

React之高阶组件_运行环境_02

  • 让Toot也显示出schoolName的值
import React from 'react';
import ReactDom from 'react-dom';

let Wrapper = Component => props => (
<div>
{props.scholName}<hr />
<Component {...props} />
</div>
);


@Wrapper // 等价于 A = Wrapper(A)
class A extends React.Component{
render(){
return <div>A {this.props.scholName}</div>
}
}

ReactDom.render(<A scholName="B" />,document.getElementById("root"));

React之高阶组件_项目构建_03

  • 使用​​<Component {...props} />​​相当于给组件增加了属性

带参装饰器

  • 上面例子中如果想给装饰器添加其他参数,可以如下实现
import React from 'react';
import ReactDom from 'react-dom';

let Wrapper = id => Component => props => (
<div id = {id}>
{props.scholName}<hr />
<Component {...props} />
</div>
);


@Wrapper("xdd") // 带参装饰器
class A extends React.Component{
render(){
return <div>A {this.props.scholName}</div>
}
}

ReactDom.render(<A scholName="B" />,document.getElementById("root"));

React之高阶组件_项目构建_04


标签:Wrapper,React,props,组件,import,高阶,ReactDom
From: https://blog.51cto.com/u_8406447/5769521

相关文章

  • 基础篇——组件
    二,组件1,组件有两种定义方式:class(类组件)和使用函数(函数组件)class:继承自React.Component内部必须定义render方法,返回该组件UI的React元素使用函数:接收props作为......
  • 基础组件(一)
    1.TextInput允许用户输入文本的基础组件.属性onChangeText 接受一个函数,而此函数会在文本变化时被调用。onSubmitEditing 在文本被提交后(用户按下软键盘上的提交键)调用 ......
  • #打卡不停更# HarmonyOS - 基于ArkUI(JS)实现虚拟摇杆组件
    作者:杨尚晓前言虚拟摇杆在移动端游戏中是最常见看的,用来实现游戏中的精灵移动。本案例中使用jspai中的div和image组件来实现的虚拟摇杆组件,然后监听touch事件获取滑动的方......
  • 从0搭建vue3组件库:Shake抖动组件
    先看下效果其实就是个抖动效果组件,实现起来也非常简单。之所以做这样一个组件是为了后面写Form表单的时候会用到它做一个规则校验,比如下面一个简单的登录页面,当点击登录......
  • vue组件通信6种方式总结(常问知识点)
    前言在Vue组件库开发过程中,Vue组件之间的通信一直是一个重要的话题,虽然官方推出的Vuex状态管理方案可以很好的解决组件之间的通信问题,但是在组件库内部使用Vuex往往会......
  • React Hook:useState
    Hook 是React16.8的新增特性。它可以让你在不编写class的情况下使用state以及其他的React特性。但是不要什么业务都使用hook,请在合适的时候使用hook,否则会造......
  • React:Props属性(父组件传值子组件)
    React的一大特点是单向数据流。React中的每一个组件,都包含有一个属性(props),属性主要是从父组件传递给子组件的,在组件内部,我们可以通过this.props获取属性对象。1、定义和......
  • [原创]一款基于Reactor线程模型的java网络爬虫框架
    AJSpridergithub:​​https://github.com/zhuchangwu/AJSpider​​概述AJSprider是笔者基于Reactor线程模式+Jsoup+HttpClient封装的一款轻量级java多线程网络爬虫框架,简......
  • el-upload多文件上传组件封装
    文件多次上传,保留进度条<template><divclass="upload-file"><el-upload:action="uploadFileUrl":on-success="handleUploadSuccess"......
  • 使用vitepress构建组件库文档
    vitepress-demoblock  为vitepress添加更专业的Demo演示能力,让您在开发vue组件库或者vue相关文档编写时,可以通过引入vue文件的时候结果显示和代码演示。文档官方文......