【发布时间】:2020-05-11 04:20:15
【问题描述】:
我正在尝试实现微前端概念。为此,我将关注react 应用程序。
- 容器
- 标题
- 仪表板
所有 3 个都是单独的应用程序。 Header 和 Dashboard - 我想在 Container 应用程序中使用它。
对于Header 应用程序,它是一个简单的react 功能组件。我在webpack.config.js 中使用以下内容。
output: {
path: path.join(__dirname, '/dist'),
filename: 'header-bundle.js',
library: 'TestHeader',
libraryTarget: 'umd'
},
在package.json:
"main": "dist/header-bundle.js",
"peerDependencies": {
"react": "16.12.0"
},
"devDependencies": {
"@babel/cli": "^7.8.3",
"@babel/core": "^7.8.3",
"@babel/preset-env": "^7.8.3",
"@babel/preset-react": "^7.8.3",
"babel-loader": "^8.0.6",
"html-webpack-plugin": "^3.2.0",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"webpack": "^4.41.5",
"webpack-cli": "^3.3.10",
"webpack-dev-server": "^3.10.1"
}
- 从
Header做了npm link
在Container 应用程序中:
- npm link Header
在App.js 的Container 组件中:
import React from 'react';
import Header from 'header-app';
const App = props => {
return (
<div>
<Header content="Header via container"></Header>
</div>
);
};
export default App;
这很好用。
但是当我添加使用react hooks 的Dashboard 组件时,我收到有关无效挂钩调用的错误。
Dashboard 应用也有react 和peerDependencies。单独Dashboard 应用运行良好。
Dashboard组件:
import React, { useState, useEffect } from 'react';
import NoIcon from './no_icon.png';
const Card = props => {
return (
<div style={{ margin: '1em' }}>
<img alt="avatar" style={{ width: '70px' }} src={NoIcon} />
<div>
<div style={{ fontWeight: 'bold' }}>{props.label}</div>
</div>
</div>
);
};
const CardList = props => {
return (
<div
style={{
display: 'grid',
gridTemplateColumns: 'repeat(3, auto)'
}}
>
{props.cards.map(card => (
<Card {...card} key={card.id} />
))}
</div>
);
};
const Dashboard = props => {
// const { apps } = props;
const [hasError, setErrors] = useState(false);
const [apps, setApps] = useState([]);
async function fetchData() {
const res = await fetch('src/data.json');
res
.json()
.then(res => setApps(res))
.catch(err => setErrors(err));
}
useEffect(() => {
fetchData();
}, []);
return (
<div>
<CardList cards={apps} />
</div>
);
};
export default Dashboard;
我有几个问题:
- 如何在一个
react应用中使用多个react应用? - 将整个
react应用程序作为单个组件导出为umd库并在另一个应用程序中使用是否正确? - 如何解决
react钩子的这个错误?reactaspeerDependencies如何在库和使用它的应用程序中工作?
【问题讨论】:
标签: javascript node.js reactjs npm webpack