Open wopelo opened 1 year ago
找到一种无需修改子应用解决方案,完整代码参考 wujie-demo,主应用和子应用均为 react + vite,在主应用中:
import WujieReact from 'wujie-react'
import { useRef, useEffect } from 'react'
import './App.css'
function App() {
// App在本地开发时会被执行多次
const times = useRef(0)
const isInita = useRef(0)
const isInitb = useRef(0)
useEffect(() => {
times.current += 1
}, [])
return (
<div className="App">
<WujieReact
width="100%"
height="100%"
name="project1"
url="//localhost:8081/"
plugins={
[{
jsBeforeLoaders: [{
content: 'window.React = window.parent.React'
}, {
content: 'window.ReactDOM = window.parent.ReactDOM'
}, {
callback(appWindow) {
isInita.current += 1
if (isInita.current === times.current) {
appWindow.__REACT_DEVTOOLS_GLOBAL_HOOK__ = window.__REACT_DEVTOOLS_GLOBAL_HOOK__
}
}
}]
}]
}
></WujieReact>
<WujieReact
width="100%"
height="100%"
name="project2"
url="//localhost:8082/"
plugins={
[
{
jsBeforeLoaders: [{
callback(appWindow) {
isInitb.current += 1
if (isInitb.current === times.current) {
appWindow.__REACT_DEVTOOLS_GLOBAL_HOOK__ = window.__REACT_DEVTOOLS_GLOBAL_HOOK__
}
}
}]
}
]
}
></WujieReact>
</div>
)
}
export default App
react-devtools 中的效果如图: 用了点不优雅的方式,解决遇到的两个问题:
描述bug 主应用和子应用均是react,在主应用中打开控制台,react-devtools无法检查子应用中的元素
如何复现 直接使用官方react主应用demo即可 尝试过将子应用的REACT_DEVTOOLS_GLOBAL_HOOK赋值为主应用的REACT_DEVTOOLS_GLOBAL_HOOK,看起来并没有效果