记录项目搭建的大致流程,详细的可以查看 Ant Design 实战教程(beta 版),或者Umi文档及Dva文档
全局安装umi
yarn global add umi
新建项目文件夹并cd进入
mkdir my-app
cd my-app
初始化package.json文件
yarn init -y
新建src文件
mkdir src
命令方式新建组件文件
umi generate pages index/index // 创建pages目录并在当前目录下新建index文件夹以及在index文件夹下新建index文件
generate: umi命令行工具
在package.json中添加启动脚本命令
// package.json
{
"scripts": {
+ "start": "umi dev",
+ "build": "umi build"
}
}
在终端输入 yarn start,就可以启动项目了
umi 3 之后 插件 “umi-plugin-react” 已不再适用, 而是改用 “@umijs/preset-react”
{
"devDependencies": {
- "umi-plugin-react": "^1"
+ "@umijs/preset-react": "^1"
}
}
安装好 "@umijs/preset-react"和 “antd” 之后 需要在config配置文件中添加配置,首先在根目录下新建config文件夹,并新建config.js文件
yarn add @umijs/preset-react
yarn add antd
配置文件中也不是 umi 3 原先的写法
export default {
- plugins: [
- ['umi-plugin-react', {
- dva: {
},
- antd: {
},
- ...
- }]
- ],
+ dva: {
},
+ antd: {
},
+ ...
}
升级到 Umi 3 :升级到umi3
在页面组件中使用antd组件
// 引入
import {
Card, Button } from 'antd';
// 使用
<Card key={
card.id}>
<div>Q: {
card.setup}</div>
<div>
<strong>A: {
card.punchline}</strong>
</div>
</Card>
安装dva
yarn add dva
配置文件中配置
export default {
+ dva: {
},
+ antd: {
},
+ ...
}
src目录下新建models文件夹并创建model.js文件
export default {
namespace: 'puzzleCard',
state: {
data: [
{
id: 1,
setup: 'Did you hear about the two silk worms in a race?',
punchline: 'It ended in a tie',
},
{
id: 2,
setup: 'What happens to a frog\'s car when it breaks down?',
punchline: 'It gets toad away',
},
],
counter: 100,
}
}
将组件和model.js文件关联起来
import {
connect } from 'dva';
const namespace = 'puzzleCard' // puzzleCard对应的是model.js文件里面的namespace
const mapStateToProps = (state) => {
const cardList = state[namespace].data
return {
cardList
}
}
export default connect(mapStateToProps)(Index)
点击触发dispatch处理
先在model.js文件中添加reducer处理
reducers: {
addNewCard(state, {
payload: newCard }) {
const nextCounter = state.counter + 1;
const newCardData = {
...newCard, id: nextCounter };
const nextData = state.data.concat(newCardData)
return {
data: nextData,
counter: nextCounter,
}
}
}
在页面组件中添加点击触发事件
<Button onClick={
() => props.onClickAdd({
setup: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit',
punchline: 'here we use dva',
})}> 添加卡片 </Button>
const mapDispatchToProps = (dispatch) => {
return {
onClickAdd: (newCard) => {
const action = {
type: `${
namespace}/addNewCard`,
payload: newCard
}
dispatch(action)
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Index)