框架版本:
react官方cli,内置webpack5+,react17+
在react子应用接入qiankun时出现了以下错误
You need to export lifecycle functions
解决方案:
在入口文件常规配置时,注意底部的环境判断以及window.qiankunLifecycle
变量赋值
function render(props: any) {
const { container } = props
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<BrowserRouter basename="/dvp">
<ConfigProvider virtual={true} locale={zhCN}>
<App />
</ConfigProvider>
</BrowserRouter>
</PersistGate>
</Provider>
</React.StrictMode>,
container ? container.querySelector('#root') : document.getElementById('root')
)
}
declare global {
interface Window {
__POWERED_BY_QIANKUN__: boolean
__webpack_public_path__: string
__INJECTED_PUBLIC_PATH_BY_QIANKUN__: string
qiankunLifecycle: any
}
}
declare var __webpack_public_path__: any
if (!window.__POWERED_BY_QIANKUN__) {
render({})
}
if (window.__POWERED_BY_QIANKUN__) {
__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__
}
export async function bootstrap() {
console.log(' react app bootstraped')
}
export async function mount(props: any) {
console.log('props from main framework', props)
render(props)
}
export async function unmount(props: any) {
const { container } = props
ReactDOM.unmountComponentAtNode(container ? container.querySelector('#root') : document.querySelector('root'))
}
if (process.env.NODE_ENV === 'development') {
window.qiankunLifecycle = {
bootstrap,
mount,
unmount
}
然后在index.html
中
<% if(process.env.NODE_ENV==='development' ) { %>
<script entry>
if (window.__POWERED_BY_QIANKUN__) {
window.purehtml = window.qiankunLifecycle;
}
</script>
<% } %>
我们在看问题时,要首先百度,找不到就立即查询github已经关闭的问题,培养一个好的解决问题的思维