antd
是基於 Ant Design 設計體系的 React UI 組件庫,主要用於研發企業級中後臺產品。javascript
文章可參考源碼:antd-with-ts-democss
以筆者的經驗來看,Ant Design 設計體系下的產品設計理念、使用方式、底層技術、周邊工具都保持着高度一致,工具不是越多越好,有一套好用順手的就行,UI框架千千萬,你不可能都學一遍。Ant Design 無疑可以減小你的學習成本。html
設計前端
組件庫vue
Ant Design Mobile of React: antd-mobile
是 Ant Design 的移動規範的 React 實現,服務於螞蟻及口碑無線業務。java
@ant-design/react-native
是 Ant Design 的移動規範的 React 實現,服務於螞蟻及口碑無線業務。Ant Design of Angular: 這裏是 Ant Design 的 Angular 實現,開發和服務於企業級後臺產品。node
Icons: 一整套優質的圖標集react
AntV: AntV 是螞蟻金服全新一代數據可視化解決方案,致力於提供一套簡單方便、專業可靠、無限可能的數據可視化最佳實踐。webpack
Ant Design Pro: 開箱即用的中臺前端/設計解決方案git
從上面的體系中能夠看出,Ant Design of React 能夠說是整個 Ant Design 設計體系的核心產品,想要學習 Ant Design Pro,首先就要先熟悉 Ant Design of React。
若是拿 antd 和 element-ui、iview 這些老牌 Vue.js UI 框架對比,遙遙領先啊有沒有:
若是拿 ant-design-vue 來和 element-ui、iview這些老牌 vue UI框架對比,也是頗有競爭力的:
$ yarn add antd
複製代碼
Antd 系列的 UI 組件庫都須要引入 babel-plugin-import 庫來實現懶加載
// .babelrc or babel-loader option
{
"plugins": [
["import", {
"libraryName": "antd",
"libraryDirectory": "es",
"style": "css" // `style: true` 會加載 less 文件
}]
]
}
複製代碼
而後只需從 antd 引入模塊便可,無需單獨引入樣式。等同於下面手動引入的方式。
// babel-plugin-import 會幫助你加載 JS 和 CSS
import { DatePicker } from 'antd'
複製代碼
在開始以前,推薦先學習 React 和 ES2015,並正確安裝和配置了 Node.js v8 或以上。官方指南假設你已瞭解關於 HTML、CSS 和 JavaScript 的中級知識,而且已經徹底掌握了 React 全家桶的正確開發方式。若是你剛開始學習前端或者 React,將 UI 框架做爲你的第一步可能不是最好的主意。
訪問 u.ant.design/codesandbox… 建立一個 codesandbox 的在線示例,別忘了保存以建立一個新的實例。
直接用下面的代碼替換 index.js
的內容,用 React 的方式直接使用 antd 組件。
import React from 'react';
import ReactDOM from 'react-dom';
import { ConfigProvider, DatePicker, message } from 'antd';
// 因爲 antd 組件的默認文案是英文,因此須要修改成中文
import zhCN from 'antd/es/locale/zh_CN';
import moment from 'moment';
import 'moment/locale/zh-cn';
import 'antd/dist/antd.css';
import './index.css';
moment.locale('zh-cn');
class App extends React.Component {
state = {
date: null,
};
handleChange = date => {
message.info(`您選擇的日期是: ${date ? date.format('YYYY-MM-DD') : '未選擇'}`);
this.setState({ date });
};
render() {
const { date } = this.state;
return (
<ConfigProvider locale={zhCN}>
<div style={{ width: 400, margin: '100px auto' }}>
<DatePicker onChange={this.handleChange} />
<div style={{ marginTop: 20 }}>
當前日期:{date ? date.format('YYYY-MM-DD') : '未選擇'}
</div>
</div>
</ConfigProvider>
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
複製代碼
你能夠在左側菜單查看組件列表,好比 Alert 組件,組件文檔中提供了各種演示,最下方有組件 API 文檔能夠查閱。在代碼演示部分找到第一個例子,點擊右下角的圖標展開代碼。
而後依照演示代碼的寫法,在以前的 codesandbox 裏修改 index.js
,首先在 import
內引入 Alert 組件:
- import { ConfigProvider, DatePicker, message } from 'antd';
+ import { ConfigProvider, DatePicker, message, Alert } from 'antd';
複製代碼
而後在 render
內添加相應的 jsx 代碼:
<DatePicker onChange={value => this.handleChange(value)} />
<div style={{ marginTop: 20 }}>
- 當前日期:{date ? date.format('YYYY-MM-DD') : '未選擇'}
+ <Alert message={`當前日期:${date ? date.format('YYYY-MM-DD') : '未選擇'}`} type="success" />
</div>
複製代碼
好的,如今你已經會使用基本的 antd 組件了,你能夠在這個例子中繼續探索其餘組件的用法。若是你遇到組件的 bug,也推薦建一個可重現的 codesandbox 來報告 bug。
實際項目開發中,你會須要構建、調試、代理、打包部署等一系列工程化的需求。您能夠閱讀後面的文檔或者使用如下腳手架和範例:
你可使用 antd-dayjs-webpack-plugin 插件用 Day.js 替換 momentjs 來大幅減少打包大小。這須要更新 webpack 的配置文件以下:
// webpack-config.js
import AntdDayjsWebpackPlugin from 'antd-dayjs-webpack-plugin';
module.exports = {
// ...
plugins: [new AntdDayjsWebpackPlugin()],
};
複製代碼
使用 create-react-app
一步步地建立一個 TypeScript 項目,並引入 antd。
建立 cra-template-typescript 項目:
$ npx create-react-app my-app --template typescript
複製代碼
而後咱們進入項目並啓動。
$ cd antd-demo-ts
$ yarn start
複製代碼
此時瀏覽器會訪問 http://localhost:3000/ ,看到 Welcome to React
的界面就算成功了。
$ yarn add antd
複製代碼
咱們須要對 create-react-app 的默認配置進行自定義,這裏咱們使用 react-app-rewired (一個對 create-react-app 進行自定義配置的社區解決方案)。
引入 react-app-rewired 並修改 package.json 裏的啓動配置。因爲新的 react-app-rewired@2.x 版本的關係,你還須要安裝 customize-cra。
$ yarn add react-app-rewired customize-cra -D
複製代碼
/* package.json */
"scripts": {
- "start": "react-scripts start",
+ "start": "react-app-rewired start",
- "build": "react-scripts build",
+ "build": "react-app-rewired build",
- "test": "react-scripts test",
+ "test": "react-app-rewired test",
}
複製代碼
在項目根目錄建立一個 config-overrides.js
用於修改默認配置:
module.exports = function override(config, env) {
// do stuff with the webpack config...
return config;
};
複製代碼
babel-plugin-import 是一個用於按需加載組件代碼和樣式的 babel 插件(原理),如今咱們嘗試安裝它並修改 config-overrides.js
文件。
$ yarn add babel-plugin-import -D
複製代碼
替換 config-overrides.js
文件內容:
const { override, fixBabelImports } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: 'css', // `style: true` 會加載 less 文件
}),
);
複製代碼
// src/App.tsxe
import React from 'react';
import { Button } from 'antd';
import './App.css';
function App() {
return (
<div className="App">
<Button type="primary">Button</Button>
</div>
);
}
export default App;
複製代碼
運行 yarn start
訪問頁面,antd 組件的 js 和 css 代碼都會按需加載,你在控制檯也不會看到這樣的警告信息。關於按需加載的原理和其餘方式能夠閱讀這裏。
按照 配置主題 的要求,自定義主題須要用到 less 變量覆蓋功能。咱們能夠引入 customize-cra
中提供的 less 相關的函數 addLessLoader 來幫助加載 less 樣式,同時修改 config-overrides.js
文件以下。
$ yarn add less less-loader -D
複製代碼
- const { override, fixBabelImports } = require('customize-cra');
+ const { override, fixBabelImports, addLessLoader } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
- style: 'css',
+ style: true,
}),
+ addLessLoader({
+ javascriptEnabled: true,
+ modifyVars: { '@primary-color': '#1DA57A' },
+ }),
);
複製代碼
這裏利用了 less-loader 的 modifyVars
來進行主題配置,變量和其餘配置方式能夠參考 配置主題 文檔。
修改後重啓 yarn start
,若是看到一個綠色的按鈕就說明配置成功了。
+ const AntdDayjsWebpackPlugin = require('antd-dayjs-webpack-plugin');
- const { override, fixBabelImports, addLessLoader } = require('customize-cra');
+ const { override, fixBabelImports, addLessLoader, addWebpackPlugin } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
}),
addLessLoader({
javascriptEnabled: true,
modifyVars: { '@primary-color': '#1DA57A' },
}),
+ addWebpackPlugin(new AntdDayjsWebpackPlugin()),
);
複製代碼
$ yarn add -D @babel/plugin-proposal-decorators
複製代碼
const { addDecoratorsLegacy } = require('customize-cra');
module.exports = override(
...
addDecoratorsLegacy(),
...
);
複製代碼
module.exports = override(
...,
...addBabelPresets(
[
"@babel/preset-env",
{
targets: {
browsers: ["> 1%", "last 2 versions"],
ie: 9
},
}
]
)
...
);
複製代碼
// config-overrides.js
const { useBabelRc } = require('customize-cra')
module.exports = override(
...
// 容許使用 .babelrc.js 文件進行Babel配置。
useBabelRc()
...
);
複製代碼
$ yarn add @babel/preset-env -D
複製代碼
// .babelrc.js
module.exports = {
presets: [
[
"@babel/preset-env", //兼容ie9
{
targets: {
ie: "9"
}
}
]
],
plugins: ["@babel/plugin-proposal-decorators"] // 能夠用來替換 addDecoratorsLegacy
}
複製代碼
做者微信 | 知識星球 | 讚揚做者 |
---|---|---|