溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

react能不能實(shí)現(xiàn)依賴注入

發(fā)布時(shí)間:2022-04-27 11:08:29 來源:億速云 閱讀:402 作者:zzz 欄目:web開發(fā)

這篇文章主要講解了“react能不能實(shí)現(xiàn)依賴注入”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“react能不能實(shí)現(xiàn)依賴注入”吧!

react能實(shí)現(xiàn)依賴注入。方法:1、用props實(shí)現(xiàn)依賴注入,可通過接收props生成html;2、用context實(shí)現(xiàn)依賴注入;3、用jsx實(shí)現(xiàn)依賴注入;4、用InversifyJS、“inversify-react”等依賴注入庫(kù)實(shí)現(xiàn)。

本教程操作環(huán)境:Windows10系統(tǒng)、react17.0.1版、Dell G3電腦。

react能實(shí)現(xiàn)依賴注入嗎

React能實(shí)現(xiàn)依賴注入

下面幾個(gè)常見的代碼,其實(shí)都應(yīng)用了依賴注入的思想,我們來看幾個(gè)例子:

1、使用 props 允許依賴注入

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

welcome 組件通過接收 props 然后生成 html,別驚訝,我們最常用的 props 其實(shí)就是應(yīng)用了依賴注入的思想。

2、使用 context 是實(shí)現(xiàn)依賴注入的另一種方法

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

由于 context 是沿著組件樹向下傳遞的,我們可以使用組件內(nèi)部的 hooks 來提取到它。

3、只使用 jsx 也能實(shí)現(xiàn)依賴注入

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 參數(shù)被傳遞給 <List>組件,然后組件通過 REST API 獲取遠(yuǎn)程數(shù)據(jù)。

但是,<List> 組件并不會(huì)直接渲染數(shù)據(jù),相反,它把渲染數(shù)據(jù)的重任交給了子組件 <Datagrid>。<Datagrid> 組件的渲染依賴于 <List>,<List> 是設(shè)置這種依賴關(guān)系的調(diào)用者。

但是,這些策略可能對(duì)小型項(xiàng)目有所幫助。在一些大型項(xiàng)目中往往我們需要更靈活的擴(kuò)展,除了這些基礎(chǔ)的應(yīng)用之外,我們還需要更好地支持依賴注入。

我們來看幾個(gè)擴(kuò)展 React 依賴注入支持的庫(kù)。

InversifyJS

react能不能實(shí)現(xiàn)依賴注入

InversifyJS 是一個(gè)強(qiáng)大、輕量的依賴注入庫(kù),并且使用非常簡(jiǎn)單,但是把它和 React 組件結(jié)合使用還是有些問題。

因?yàn)?InversifyJS 默認(rèn)使用構(gòu)造函數(shù)注入,但是 React 不允許開發(fā)者擴(kuò)展組件的構(gòu)造函數(shù)。我們通過一個(gè)例子來看看如何解決這個(gè)問題:

inversify-inject-decorators

該工具庫(kù)主要提供了 lazyInject 之類的方法,它可以給出了一個(gè)惰性的注入,意思是在對(duì)象初始化時(shí)不需要提供依賴,當(dāng)我們沒辦法改構(gòu)造函數(shù)時(shí),這個(gè)庫(kù)就派上用場(chǎng)啦。

另外,除了字面上所說的惰性,另外一個(gè)非常重要的功能就是允許你將 inversifyJs 集成到任何自己控制類實(shí)例創(chuàng)建的庫(kù)或者框架,比如 React 。

inversify-react

inversify-react 是一個(gè)唯一執(zhí)行依賴注入的庫(kù)。就像使用 React Context.Provider一樣,我們從這個(gè)庫(kù)也能拿到一個(gè) Provider:

react-inversify

雖然和上一個(gè)庫(kù)名字很像,但是兩個(gè)庫(kù)的做法是不一樣的,這種方法更接近于 React 的思想,因?yàn)閷?duì)象是作為屬性傳遞的,而不是在組件內(nèi)部實(shí)例化。

感謝各位的閱讀,以上就是“react能不能實(shí)現(xiàn)依賴注入”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)react能不能實(shí)現(xiàn)依賴注入這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI