返回顶部
首页 > 资讯 > 前端开发 > node.js >如何使用IOC解耦React组件
  • 964
分享到

如何使用IOC解耦React组件

2024-04-02 19:04:59 964人浏览 薄情痞子
摘要

小编给大家分享一下如何使用ioc解耦React组件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ioC(控制反转)是一种编程思想

小编给大家分享一下如何使用ioc解耦React组件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

ioC(控制反转)是一种编程思想,可以解耦组件,提高组件复用性。

IOC是什么

让我们来看个例子:

我们有个士兵的类,在类内部会实例化一种武器:

class Soldier {   constructor() {     // 这里我们实例化一把步枪     this.weapon = new Rifle();   }   attack() {     this.weapon.attack();   } }

士兵的武器应该是多种多样的,但是在Soldier类内部依赖了Rifle。

所以当我们想将武器从步枪换为手榴弹时,只能这样改写:

// ... constructor() {   // 这里我们实例化一把步枪   // this.weapon = new Rifle();   // 这里我们实例化一个手榴弹   this.weapon = new Grenade(); } // ...

理想的状态是:士兵不依赖具体的武器,弹药库里有什么武器,就用什么武器。

在这种情况下,IOC作为弹药库,就派上了用场。

让我们来改写代码:

第一步:DI(Dependency Injection)

改写的第一步是使士兵不依赖具体的武器,而是将武器作为依赖注入给士兵:

class Soldier {   // 将武器作为依赖注入   constructor(weapon) {     this.weapon = weapon;   }   attack() {     this.weapon.attack();   } }

我们将武器的实例作为Soldier的参数传入,于是可以如下调用:

const s1 = new Soldier(new Rifle()); const s2 = new Soldier(new Grenade());

这一步被称为DI(依赖注入)。

第二步:IOC容器

那么武器从哪儿来呢?接下来来打造我们的武器库:

class Armory {   constructor() {     this.weapon = null;   }   setWeapon(weapon) {     this.weapon = weapon;   }   getWeapon() {     return this.weapon;   } }

武器库支持存武器(setWeapon)和取武器(getWeapon)。

现在,士兵不依赖具体武器,只需要去武器库取武器:

const armory1 = new Armory();  class Soldier {   // 将武器作为依赖注入   constructor(armory) {     this.weapon = armory.getWeapon();   }   attack() {     this.weapon.attack();   } }

改造前的依赖关系:

士兵 --> 武器

改造前原先应用(士兵)拥有依赖的完全控制权。

改造后的依赖关系:

士兵 --> 武器库 <-- 武器

改造后应用(士兵)与服务提供方(武器)解耦,他们通过IOC容器(武器库)联系。

从Demo也能看出IOC与DI的关系:DI是实现IOC编程思想的一种方式。

除了DI外,另一种实现方式是Dependency Lookup(依赖查找),简称DL。

IOC与React

在React中,为组件传递的props就是一种DI实现。

为了跨层级传递数据,我们常使用Context api

function Name() {   const {name} = useContext(nameContext);   reutrn <h2>{name}</h2>; }

context将依赖提供方(name)与依赖使用方(Name)隔离,可以看作是一种IOC实现。

所以说,合理使用React可以充分利用IOC的思想解耦代码逻辑。

接下来我们看看专业的DI库如何与React结合:

InversifyJS

Inversifyjs[1]是一个强大、轻量的DI库。

如何使用IOC解耦React组件

首先我们实现依赖(武器的实现):

// armory.ts import { injectable } from "inversify";  export interface IArmory<T> {   attack(): T; }  @injectable() export class Armory implements IArmory<string> {   attack() {     return "Rifle biubiubiu~";   } }

通过inversify提供的injectable decorator标记该class是可被注入的。

接下来实现需求方(士兵的实现):

import React from "react"; import { IArmory } from "./armory";  export class Soldier extends React.Component {   private readonly Armory: IArmory<string>;    render() {     return <h2 onClick={() => this.armory.attack()}>I am a soldier</h2>;   } }

最后实例化IOC容器,连接需求方与依赖:

import { Container } from "inversify"; import { IArmory, Armory } from "./armory";  // 实例化IOC容器 export const container = new Container(); // 将依赖方注入容器,其中armory为该依赖的ID container.bind<IArmory<string>>("armory").to(Armory);

至此,完成一个React组件的简单IOC。

业务逻辑的更多依赖都可以通过注入IOC容器来实现解耦。

Hooks同样可以通过inversify完成IOC。

以上是“如何使用IOC解耦React组件”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网node.js频道!

--结束END--

本文标题: 如何使用IOC解耦React组件

本文链接: https://lsjlt.com/news/80292.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用IOC解耦React组件
    小编给大家分享一下如何使用IOC解耦React组件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!IOC(控制反转)是一种编程思想...
    99+
    2024-04-02
  • React组件如何使用
    本篇内容主要讲解“React组件如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React组件如何使用”吧!组件的定义:理解:用来实现局部功能效果的代码和资源的集合(html/css/js...
    99+
    2023-07-05
  • react拖拽组件react-sortable-hoc如何使用
    这篇“react拖拽组件react-sortable-hoc如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“react...
    99+
    2023-07-05
  • React父组件如何调用子组件
    本篇内容介绍了“React父组件如何调用子组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!调用方法:1、类组件中的调用可以利用React....
    99+
    2023-07-04
  • react component function组件使用详解
    目录不可改变性虚拟dom与真实dom函数组件组件复用纯函数组件组合--组件树组件抽离不可改变性 1.jsx- 2.component(function)-component(clas...
    99+
    2022-11-13
    react component function组件 react component function
  • 如何使用Vite+React进行组件开发
    本篇内容介绍了“如何使用Vite+React进行组件开发”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • 如何使用React进行组件库开发
    小编给大家分享一下如何使用React进行组件库开发,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!概述我们都知道,组件化的开发模式...
    99+
    2024-04-02
  • React组件中的state和setState如何使用
    本篇内容主要讲解“React组件中的state和setState如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React组件中的state和setState如何使用”吧!state的基本...
    99+
    2023-06-29
  • 如何使用react实现一个tab组件
    这篇“如何使用react实现一个tab组件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用react实现一个tab组件...
    99+
    2023-07-04
  • React组件useReducer的讲解与使用
    目录useReducer的使用刨析useReducer参数useReducer的使用useReducer的使用 在React函数式组件中,我们可以通过useState()来创建sta...
    99+
    2023-05-16
    React组件useReducer useReducer使用 useReducer讲解
  • React组件的使用详细讲解
    目录1.组件的创建方式函数式组件class组件2.组件命名规范3.组件传值props接收值(函数式组件)接收值(class组件)4.组件样式sass5.组件的生命周期函数6.受控组件...
    99+
    2022-11-16
    React组件开发 React组件创建 React组件
  • react中如何对自己的组件使用setFieldsValue
    目录react对自己的组件使用setFieldsValuesetFieldsValue的用法问题使用Hooks使用setFieldsValue设置初始值无效总结react对自己的组件...
    99+
    2023-03-11
    react组件 react使用setFieldsValue react setFieldsValue
  • React如何创建组件
    目录前言 组件介绍创建类组件 关于 state 关于 render 创建函数组件 渲染组件 合成组件 提取组件 Props 是只读的 前言 这节我们将介绍 React 中组件的类别...
    99+
    2024-04-02
  • 如何声明react组件
    这篇文章主要为大家展示了“如何声明react组件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何声明react组件”这篇文章吧。 ...
    99+
    2024-04-02
  • react组件样式引用失败如何解决
    今天小编给大家分享一下react组件样式引用失败如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react组件样式引用...
    99+
    2023-07-04
  • react拖拽组件react-sortable-hoc的使用
    目录1.文件12.文件23.使用使用react-sortable-hoc实现拖拽 如图: 提示:下面案例可供参考 1.文件1 代码如下(示例):文件名称:./dragcompone...
    99+
    2023-02-24
    react拖拽组件 react sortable-hoc
  • react组件mount好几次如何解决
    这篇文章主要讲解了“react组件mount好几次如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react组件mount好几次如何解决”吧!react组件mount好几次的解决办法:...
    99+
    2023-07-05
  • 如何使用React高阶组件解决横切关注点问题
    这篇文章主要介绍“如何使用React高阶组件解决横切关注点问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用React高阶组件解决横切关注点问题”文章能帮助大家解决问题。高阶组件(HOC)概...
    99+
    2023-07-04
  • React详细讲解JSX和组件的使用
    目录一、React JSX1.1 JSX简介1.2 JSX表达式1.3 JSX条件表达式1.4 JSX循环表达式1.5 JSX样式表达式1.6 JSX注释表达式二、React组件2....
    99+
    2024-04-02
  • react native如何删除组件
    这篇“react native如何删除组件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“r...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作