[英]How to embed a React/Redux app in another React/Redux app without running into lifecycle issues?
App A是一個獨立的單頁React / Redux應用程序,可以插入其他應用程序(不一定用React / Redux編寫)。 我正在嘗試將app A嵌入到另一個單頁React / Redux應用B中,如下所示:
在應用B中,創建一個組件ComponentA,其路由與app A使用的相同,並且其render()
方法為主機app A生成DIV
標記。
在ComponentA的componentWillMount()
方法中,通過在文檔正文的末尾附加相應的<script>
標記來加載以前為應用A構建的js包,這會導致應用A在頁面上呈現。
這似乎工作正常,但是,當我離開ComponentA並返回時,我看到Chrome Dev Tools控制台中出現以下錯誤的次數與訪問ComponentA的次數一樣多: “Uncaught(in promise)TypeError:無法讀取屬性'replaceChild'為null“ 。
當我檢查Dev Tools的“React”選項卡時,我可以看到app A的組件層次結構多次出現,但是,只有最后一個實際上附加到物理DOM。
我的猜測是,當我導航到應用程序B的其他部分(使用應用程序B的鏈接)時,應用程序A不知道路由更改,因此它永遠不會卸載,這會導致一些意外行為和后續錯誤。
我是這項技術的新手,我想知道是否有可能在另一台React / Redux應用程序中嵌入React / Redux應用程序。 如果是,那么我怎樣才能改變我的方法以使其正常工作?
我暫時沒有包含任何代碼片段,因為代碼是非常標准的,基本的React / Redux代碼,而且這是我所質疑的方法本身。
我能夠通過修改應用程序A的入口點中的代碼並更改應用程序的構建方式來解決問題。
在修復之前:
componentWillMount()
方法中添加app A的bundle腳本標簽。 ReactDOM.render()
,並且無法從應用程序B中卸載它。 修復后:
new()
, render()
和unmount()
方法。 componentWillMount()
:實例化app A. componentDidMount()
:調用app A的render()。 componentWillUnmount()
:調用app A的unmount()
,它調用ReactDOM.unmountComponentAtNode()
。 我現在只在“React”選項卡中看到app A的組件層次結構的一個實例,並且控制台中不再出現錯誤。
對於任何感興趣的人來說,修復程序的靈感來自我最終遇到的以下文章: https : //codeburst.io/building-react-widget-libraries-using-webpack-e0a140c16ce4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.