温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

react能不能实现依赖注入

发布时间:2022-04-27 11:08:29 来源:亿速云 阅读:409 作者:zzz 栏目:web开发

这篇文章主要讲解了“react能不能实现依赖注入”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react能不能实现依赖注入”吧!

react能实现依赖注入。方法:1、用props实现依赖注入,可通过接收props生成html;2、用context实现依赖注入;3、用jsx实现依赖注入;4、用InversifyJS、“inversify-react”等依赖注入库实现。

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

react能实现依赖注入吗

React能实现依赖注入

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

1、使用 props 允许依赖注入

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

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

react能不能实现依赖注入

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

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

inversify-inject-decorators

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

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

inversify-react

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

react-inversify

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

感谢各位的阅读,以上就是“react能不能实现依赖注入”的内容了,经过本文的学习后,相信大家对react能不能实现依赖注入这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI