• 技术文章 >web前端 >前端问答

    react能实现依赖注入吗

    长期闲置长期闲置2022-04-27 11:24:01原创280

    react能实现依赖注入。实现方法:1、利用props实现依赖注入,例如“function welcome(props){return...}”;2、利用context实现依赖注入;3、利用InversifyJS等依赖注入库实现依赖注入。

    本教程操作环境:Windows10系统、react17.0.1版、Dell G3电脑。

    react能实现依赖注入吗

    React能实现依赖注入

    下面几个常见的代码,其实都应用了依赖注入的思想,我们来看几个例子:

    1、使用 props 允许依赖注入

    function welcome(props) {
      return <h1> Hello, {props.name}</h1>;
    }

    welcome 组件通过接收 props 然后生成 html,别惊讶,我们最常用的 props 其实就是应用了依赖注入的思想。

    2、使用 context 是实现依赖注入的另一种方法

    function counter() {
      const { message } = useContext(MessageContext);
      return <p>{ message }</p>;
    }

    由于 context 是沿着组件树向下传递的,我们可以使用组件内部的 hooks 来提取到它。

    3、只使用 jsx 也能实现依赖注入

    const ReviewList = props => ( 
      <List resource="/reviews" perPage={50} {...props}> 
        <Datagrid rowClick="edit"> 
          <DateField source="date" /> 
          <CustomerField source="customer_id " /> 
          <ProductField source="product_id" /> 
          <StatusField source="status" /> 
        </Datagrid> 
      </List> 
    );

    perPage 参数被传递给 <List>组件,然后组件通过 REST API 获取远程数据。

    但是,<List> 组件并不会直接渲染数据,相反,它把渲染数据的重任交给了子组件 <Datagrid>。<Datagrid> 组件的渲染依赖于 <List>,<List> 是设置这种依赖关系的调用者。

    但是,这些策略可能对小型项目有所帮助。在一些大型项目中往往我们需要更灵活的扩展,除了这些基础的应用之外,我们还需要更好地支持依赖注入。

    我们来看几个扩展 React 依赖注入支持的库。

    InversifyJS

    02.png

    InversifyJS 是一个强大、轻量的依赖注入库,并且使用非常简单,但是把它和 React 组件结合使用还是有些问题。

    因为 InversifyJS 默认使用构造函数注入,但是 React 不允许开发者扩展组件的构造函数。我们通过一个例子来看看如何解决这个问题:

    inversify-inject-decorators

    该工具库主要提供了 lazyInject 之类的方法,它可以给出了一个惰性的注入,意思是在对象初始化时不需要提供依赖,当我们没办法改构造函数时,这个库就派上用场啦。

    另外,除了字面上所说的惰性,另外一个非常重要的功能就是允许你将 inversifyJs 集成到任何自己控制类实例创建的库或者框架,比如 React 。

    inversify-react

    inversify-react 是一个唯一执行依赖注入的库。就像使用 React Context.Provider一样,我们从这个库也能拿到一个 Provider:

    react-inversify

    虽然和上一个库名字很像,但是两个库的做法是不一样的,这种方法更接近于 React 的思想,因为对象是作为属性传递的,而不是在组件内部实例化。

    推荐学习:《react视频教程

    以上就是react能实现依赖注入吗的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:React
    上一篇:react的虚拟dom有什么用 下一篇:react中redux有中间件吗
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• react-hot-loader的用法是什么• react点击事件的几种写法是什么• react阻止事件冒泡的方法是什么• react是组件化开发吗• react中modal的用法是什么
    1/1

    PHP中文网