react能实现依赖注入。实现方法:1、利用props实现依赖注入,例如“function welcome(props){return...}”;2、利用context实现依赖注入;3、利用InversifyJS等依赖注入库实现依赖注入。
本教程操作环境:Windows10系统、react17.0.1版、Dell G3电脑。
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 参数被传递给 06f4129e898dc47f7804e0539cda96d8组件,然后组件通过 REST API 获取远程数据。
但是,06f4129e898dc47f7804e0539cda96d8 组件并不会直接渲染数据,相反,它把渲染数据的重任交给了子组件 0e6533b7bf27f7e7118f77e92a057382。0e6533b7bf27f7e7118f77e92a057382 组件的渲染依赖于 06f4129e898dc47f7804e0539cda96d8,06f4129e898dc47f7804e0539cda96d8 是设置这种依赖关系的调用者。
但是,这些策略可能对小型项目有所帮助。在一些大型项目中往往我们需要更灵活的扩展,除了这些基础的应用之外,我们还需要更好地支持依赖注入。
我们来看几个扩展 React 依赖注入支持的库。
InversifyJS
InversifyJS 是一个强大、轻量的依赖注入库,并且使用非常简单,但是把它和 React 组件结合使用还是有些问题。
因为 InversifyJS 默认使用构造函数注入,但是 React 不允许开发者扩展组件的构造函数。我们通过一个例子来看看如何解决这个问题:
inversify-inject-decorators
该工具库主要提供了 lazyInject 之类的方法,它可以给出了一个惰性的注入,意思是在对象初始化时不需要提供依赖,当我们没办法改构造函数时,这个库就派上用场啦。
另外,除了字面上所说的惰性,另外一个非常重要的功能就是允许你将 inversifyJs 集成到任何自己控制类实例创建的库或者框架,比如 React 。
inversify-react
inversify-react 是一个唯一执行依赖注入的库。就像使用 React Context.Provider一样,我们从这个库也能拿到一个 Provider:
react-inversify
虽然和上一个库名字很像,但是两个库的做法是不一样的,这种方法更接近于 React 的思想,因为对象是作为属性传递的,而不是在组件内部实例化。
推荐学习:《react视频教程》
以上是react能实现依赖注入吗的详细内容。更多信息请关注PHP中文网其他相关文章!