浅谈 react高阶组件-反向继承

简介: 1.不废话,书接上文react-高阶组件参数,只讲了,高阶组件实现方式的一种属性代理2.接下来讲 反向继承

1. 前言


1.不废话,书接上文react-高阶组件参数,只讲了,高阶组件实现方式的一种属性代理

2.接下来讲 反向继承


2. 反向继承


1.通过创建新组件继承自原始组件, 把原始组件作为父组件

2.功能: 可实现对原始组件的state状态数据更新 和 组件模板更新


3. 先来个简单的继承 热身下


1.比如基于请求拦截,响应拦截的一些想法

2.搞个 Loading 和关闭Loading

3.baseURL

3.1 简要代码


class Loading extends React.Component {
            constructor(props) {
                super(props)
                this.state = {
                    baseURL: "http://yzs.com",
                    baseImgURL: "http://yzs.com/img"
                }
            }
            show() {
                console.log("loading")
            }
            hide(){
                console.log("加载完毕")
            }
        }


1.一般脚手架项目也都是继承自 Component或者pureComponent

2.所以在根组件继承 下面的组件都具备这个功能了

3.这也是JS推出 class extends 代替原型链的,比如 vue中就是常用原型上挂axios,扯远了 O(∩_∩)O哈哈~


3.2 使用


class Btn extends Loading{
            render() {
                return(
                    <div>
                        <button onClick={this.show}> show </button>
                        <button onClick={this.hide}> hide</button>
                        <h1>{this.state.baseURL}</h1>
                    </div>
                )
            }
        }
        let App = ()=>{
             return(
                 <div>
                    <h1>App</h1>
                    <Btn/>
                </div>
             )
        }
        ReactDOM.render(<App/>,app)

子组件肯定也继承了父组件的 state,钩子


4. 高阶组件的反向继承


4.1  子组件

继承嘛 所以先准备个ChildComponent组件 ,用来继承


class ChildComponent extends React.Component {
            constructor(props) {
                super(props)
                this.state = { count: 99999 }
            }
            componentDidMount() {
                console.log("演示 反向继承 子组件 mount");
            }
            // 点击事件
            clickComponent() {
                console.log("组件被点了");
            }
            render() {
                return (
                    <div>{this.state.count}</div>
                )
            }
        }


1.简单的state 用来传递到子组件

2.简单的事件,子组件可以调用

3.简单的布局,展示数据


4.2 高阶组件


const ReverHOC = WrapComponent => {
            return class extends WrapComponent {
                constructor(props) {
                    super(props)
                    this.state = { count: 1000 }
                }
                componentDidMount() {
                    // 反向继承后,可以拿到原始组件的props和state数据
                    console.log("高阶组件", this.props, this.state)
                    console.log("高阶组件 did mount")
                    this.clickComponent()
                }
                render() {
                    return (
                        // 反向继承时, MyCom是父组件, 不能在子组件模板中使用父组件标签
                        // return <MyCom/>
                        // 使用 super.render() 渲染父组件模板 
                        <div>
                            <h1 onClick={this.clickComponent}>高阶组件</h1>
                            <div>{super.render()}</div>
                        </div>
                    )
                }
            }
        }


1.高阶组件有自己的 state

2.反向继承,也可以获取原始组件的 props state

3.componentDidMount简单调用下,证明可以访问父组件的函数

4.布局里面加入点击事件

5.父组件标签不能在组件使用,所以需要通过来渲染模板


{super.render()}


4.3 高阶组件联合使用


const HOCView = ReverHOC(ChildComponent)
        let App = () => {
            return (
                <div>
                    <h1>App</h1>
                    <ChildComponent />
                    <HOCView />
                </div>
            )
        }


1.直接使用就行

2.查看效果,点击测试


5. 高阶组件的实现方式


  1. 属性代理: 通过创建新组件来包裹原始组件, 把原始组件作为新组件的子组件渲染
    功能: 可实现对原始组件的 props数据更新 和 组件模板更新
  2. 反向继承: 通过创建新组件继承自原始组件, 把原始组件作为父组件
    功能: 可实现对原始组件的state状态数据更新 和 组件模板更新


6. 渲染劫持


通过高阶组件把原始组件的模板进行修改和替换
  1. 渲染劫持指对一个组件渲染内容的装饰或修改, 一般通过高阶组件来实现, 把一个组件传入高阶组件,
    可以对这个组件的模板进行修改后执行渲染, 也可以阻止组件渲染,并修改组件中的数据和逻辑
    2.渲染劫持的应用: 一般用于一些需要登录状态的页面, 在路由请求渲染页面(如订单页)之前,
    使用高阶组件判断是否已登录,如果已登录,返回订单页模板, 如果没有登录,返回空,并跳转到登录页
    3.后续有空在补充




相关文章
|
26天前
|
前端开发 JavaScript 测试技术
React 分页组件 Pagination
本文介绍了如何在 React 中从零构建分页组件,涵盖基础概念、常见问题及解决方案。通过示例代码详细讲解了分页按钮的创建、分页按钮过多、初始加载慢、状态管理混乱等常见问题的解决方法,以及如何避免边界条件、性能优化和用户反馈等方面的易错点。旨在帮助开发者更好地理解和掌握 React 分页组件的开发技巧,提升应用的性能和用户体验。
62 0
|
14天前
|
存储 前端开发 测试技术
React组件的最佳实践
React组件的最佳实践
|
12天前
|
前端开发 API 开发者
React 文件上传组件 File Upload
本文详细介绍了如何在 React 中实现文件上传组件,从基础的文件选择和上传到服务器,再到解决文件大小、类型限制、并发上传等问题,以及实现多文件上传、断点续传和文件预览等高级功能,帮助开发者高效构建可靠的应用。
39 12
|
7天前
|
存储 前端开发 JavaScript
React 表单输入组件 Input:常见问题、易错点及解决方案
本文介绍了在 React 中使用表单输入组件 `Input` 的基础概念,包括受控组件与非受控组件的区别及其优势。通过具体代码案例,详细探讨了创建受控组件、处理多个输入字段、输入验证和格式化的方法,并指出了常见易错点及避免方法,旨在提升表单的健壮性和用户体验。
18 4
|
14天前
|
前端开发 JavaScript API
React 文件下载组件 File Download
本文介绍了在React中实现文件下载组件的方法,包括使用`a`标签和JavaScript动态生成文件,解决了文件路径、文件类型、大文件下载及文件名乱码等问题,并展示了使用第三方库`file-saver`和生成CSV文件的高级用法。
30 6
|
11天前
|
前端开发 JavaScript API
React 文件下载组件:File Download
本文详细介绍了如何在React应用中实现文件下载组件,包括基本概念、实现步骤和代码示例。同时,探讨了常见问题如文件类型不匹配、文件名乱码等及其解决方法,旨在提升用户体验和代码可维护性。
30 2
|
15天前
|
存储 前端开发 JavaScript
React 文件上传组件 File Upload
本文介绍了如何在 React 中实现文件上传组件,包括基本的概念、实现步骤、常见问题及解决方案。通过 `&lt;input type=&quot;file&quot;&gt;` 元素选择文件,使用 `fetch` 发送请求,处理文件类型和大小限制,以及多文件上传和进度条显示等高级功能,帮助开发者构建高效、可靠的文件上传组件。
41 2
|
16天前
|
存储 前端开发
在React框架中,如何使用对象来管理组件的状态
在React中,组件状态通过`state`对象管理,利用`setState`方法更新状态。状态变化触发组件重新渲染,实现UI动态更新。对象结构清晰,便于复杂状态管理。
|
19天前
|
前端开发 JavaScript 定位技术
React 地图组件 Mapbox 入门指南
Mapbox 是一个强大的地图平台,提供丰富的地图数据和工具,支持多种开发语言和框架。本文介绍如何在 React 项目中使用 Mapbox,涵盖基础概念、安装配置、基本用法、常见问题及解决方法、高级用法等内容,并通过代码示例详细说明,帮助开发者提升地图应用的开发效率和用户体验。
57 2
|
20天前
|
前端开发 JavaScript API
探究 React Hooks:如何利用全新 API 优化组件逻辑复用与状态管理
本文深入探讨React Hooks的使用方法,通过全新API优化组件逻辑复用和状态管理,提升开发效率和代码可维护性。