React中如何引入Angular組件詳解
前言
為了在我的編輯器中使用 Angular,我用 Angular 編寫了一個(gè)重命名功能。而為了使用它,我得再次使用一次 customEvent ,而在這個(gè)微前端架構(gòu)的系統(tǒng)中,其事件通訊機(jī)制已經(jīng)相當(dāng)?shù)膹?fù)雜。在這部分的代碼進(jìn)一步惡化之前,我得嘗試有沒有別的方式。于是,我想到了之前在其它組件中使用的 Web Components 技術(shù),而 Angular 6 正好可以支持。
下面話不多說了,來一起看看詳細(xì)的介紹吧
HTML 中引入 Web Components
我所需要做的事情也相當(dāng)?shù)暮?jiǎn)單,只需要將我的組件注冊(cè)為一個(gè) customElements,稍微改一下 app.module.ts 文件。在這種情況之下,我們就可以構(gòu)建出獨(dú)立于框架的組件。
如下是原始的 module 文件:
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
bootstrap: [AppComponent]
})
export class AppModule { }
如下則是新的 module 文件:
@NgModule({
declarations: [InteractBar],
imports: [BrowserModule],
entryComponents: [InteractBar]
})
export class AppModule {
constructor(private injector: Injector) {
const interactBar = createCustomElement(InteractBar, {injector});
customElements.define('interact-bar', interactBar);
}
}
然后,只需要就可以在 HTML 中傳遞參數(shù): <interact-bar filename="phodal.md"></interact-bar> ,或者監(jiān)聽對(duì)應(yīng)的 @Output 事件:
const bar = document.querySelector('interact-bar');
bar.addEventListener('action', (event: any) => {
...
})
事實(shí)證明,使用 Angular 構(gòu)建的 Web Components 組件是可以用的。于是,我便想,不如在 React 中引入 Angular 組件吧。
React 中引入 Angular 組件
于是,便使用 create-react-app 創(chuàng)建了一個(gè) DEMO,然后引入組件:
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
<interact-bar filename="phodal.com" onAction={this.action}></interact-bar>
</p>
</div>
嗯,it works。至少 filename 參數(shù)可以成功地傳遞到 Angular 代碼中,而 action 在當(dāng)前似乎還不行。但是毫無疑問,它在未來是可用的。
Demo 見: https://phodal.github.io/wc-angular-demo/
Repo 見: https://github.com/phodal/wc-angular-demo
這個(gè)時(shí)候,我遇到了一個(gè)問題,我使用 Angular 構(gòu)建的這個(gè)組件,大概是有 257kb。這個(gè)大小的組件,但是有點(diǎn)恐怖。
Web Components 框架構(gòu)建組件
在那些微前端相關(guān)的文章中,我們指出類似于 Stencil 的形式,將組件直接構(gòu)建成 Web Components 形式的組件,隨后在對(duì)應(yīng)的諸如,如 React 或者 Angular 中直接引用。
如下是一個(gè)使用 Stencil 寫的 Web Components 的例子:
@Component({
tag: 'phodit-header',
styleUrl: 'phodit-header.css'
})
export class PhoditHeader {
@State() showCloseHeader = false;
componentDidLoad() {...}
handleClick() {...}
render() {
if (this.showCloseHeader) {...}
return (<div></div>);
}
}
使用它構(gòu)建出來的組件,大概可以在 30kb 左右的大小。
不論是不是一個(gè)經(jīng)量級(jí)的方案,但是它至少證明了組件復(fù)用的可行性。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- 淺談vue,angular,react數(shù)據(jù)雙向綁定原理分析
- 前端框架學(xué)習(xí)總結(jié)之Angular、React與Vue的比較詳解
- VueJs與ReactJS和AngularJS的異同點(diǎn)
- 利用angular、react和vue實(shí)現(xiàn)相同的面試題組件
- 如何將你的AngularJS1.x應(yīng)用遷移至React的方法
- JavaScript框架Angular和React深度對(duì)比
- 詳解Angular Reactive Form 表單驗(yàn)證
- 在React框架中實(shí)現(xiàn)一些AngularJS中ng指令的例子
- 詳解React Angular Vue三大前端技術(shù)
相關(guān)文章
react實(shí)現(xiàn)頭部導(dǎo)航,選中狀態(tài)底部出現(xiàn)藍(lán)色條塊問題
這篇文章主要介紹了react實(shí)現(xiàn)頭部導(dǎo)航,選中狀態(tài)底部出現(xiàn)藍(lán)色條塊問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
React 組件的狀態(tài)下移和內(nèi)容提升的操作方法
這篇文章主要介紹了React 組件的狀態(tài)下移和內(nèi)容提升,通過代碼講解了渲染性能的組件問題結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-11-11
React函數(shù)組件hook原理及構(gòu)建hook鏈表算法詳情
這篇文章主要介紹了React函數(shù)組件hook原理及構(gòu)建hook鏈表算法詳情,每一個(gè)?hook?函數(shù)都有對(duì)應(yīng)的?hook?對(duì)象保存狀態(tài)信息,更多詳細(xì)分析,需要的朋友可以參考一下2022-07-07
基于React-Dropzone開發(fā)上傳組件功能(實(shí)例演示)
這篇文章主要介紹了基于React-Dropzone開發(fā)上傳組件,主要講述的是在React-Flask框架上開發(fā)上傳組件的技巧,需要的朋友可以參考下2021-08-08
React Hook 'useEffect' is call
這篇文章主要為大家介紹了React Hook 'useEffect' is called in function報(bào)錯(cuò)解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12

