Files
ant-design/docs/react/use-with-create-react-app-cn.html
T
2017-03-11 12:51:12 +08:00

192 lines
47 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="An enterprise-class UI design language and React-based implementation">
<meta name="description" content="A set of high-quality React components">
<meta name="description" content="One of best React UI library for enterprise background">
<title>Ant Design - A UI Design Language</title>
<script>
(function() {
function isLocalStorageNameSupported() {
var testKey = 'test';
var storage = window.localStorage;
try {
storage.setItem(testKey, '1');
storage.removeItem(testKey);
return true;
} catch (error) {
return false;
}
}
// 优先级提高到所有静态资源的前面,语言不对,加载其他静态资源没意义
var pathname = location.pathname;
function isZhCN(pathname) {
return /-cn\/?$/.test(pathname);
}
function getLocalizedPathname(path, zhCN) {
var pathname = path.startsWith('/') ? path : '/' + path;
if (!zhCN) { // to enUS
return /\/?index-cn/.test(pathname) ? '/' : pathname.replace('-cn', '');
} else if (pathname === '/') {
return '/index-cn';
} else if (pathname.endsWith('/')) {
return pathname.replace(/\/$/, '-cn/');
}
return pathname + '-cn';
}
// 兼容旧的 URL `?locale=...`
var queryString = location.search;
if (queryString) {
var isZhCNConfig = queryString.indexOf('zh-CN') > -1;
if (isZhCNConfig && !isZhCN(pathname)) {
location.pathname = getLocalizedPathname(pathname, isZhCNConfig)
}
}
// 首页无视链接里面的语言设置 https://github.com/ant-design/ant-design/issues/4552
if (isLocalStorageNameSupported() && (pathname === '/' || pathname === '/index-cn')) {
var lang = (window.localStorage && localStorage.getItem('locale')) || (navigator.language.toLowerCase() === 'zh-cn' ? 'zh-CN' : 'en-US');
// safari is 'zh-cn', while other browser is 'zh-CN';
if ((lang === 'zh-CN') !== isZhCN(pathname)) {
location.pathname = getLocalizedPathname(pathname, lang === 'zh-CN');
}
}
document.documentElement.className += isZhCN(pathname) ? 'zh-cn' : 'en-us';
})()
</script>
<link rel="icon" href="https://t.alipayobjects.com/images/T1QUBfXo4fXXXXXXXX.png" type="image/x-icon">
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.cnpmjs.org/css?family=Lato:400,700|Raleway"/>
<link rel="stylesheet" type="text/css" href="/index.css"/>
<style id="nprogress-style">
#nprogress { display: none }
</style>
<!--[if lte IE 10]>
<script
src="https://as.alipayobjects.com/g/component/??console-polyfill/0.2.2/index.js,media-match/2.0.2/media.match.min.js"></script>
<![endif]-->
<script>
if (!window.Intl) {
document.writeln('<script src="https://as.alipayobjects.com/g/component/intl/1.0.1/??Intl.js,locale-data/jsonp/en.js,locale-data/jsonp/zh.js">' + '<' + '/script>');
}
if (!window.Promise) {
document.writeln('<script src="https://as.alipayobjects.com/g/component/es6-promise/3.2.2/es6-promise.min.js"' + '>' + '<' + '/' + 'script>');
}
// Enable Google Analytics
if (!location.port) {
/* eslint-disable */
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-72788897-1', 'auto');
ga('send', 'pageview');
/* eslint-enable */
}
</script>
</head>
<body>
<div id="react-content">
<div class="page-wrapper" data-reactroot="" data-reactid="1" data-react-checksum="1000970282"><header id="header" class="clearfix" data-reactid="2"><div class="ant-row" data-reactid="3"><div class="ant-col-xs-24 ant-col-sm-24 ant-col-md-5 ant-col-lg-4" data-reactid="4"><a id="logo" href="/index-cn" data-reactid="5"><img alt="logo" src="https://t.alipayobjects.com/images/rmsweb/T1B9hfXcdvXXXXXXXX.svg" data-reactid="6"/><span data-reactid="7">Ant Design</span></a></div><div class="ant-col-xs-0 ant-col-sm-0 ant-col-md-19 ant-col-lg-20" data-reactid="8"><div id="search-box" data-reactid="9"><div class="ant-select ant-select-combobox ant-select-enabled" data-reactid="10"><div class="ant-select-selection
ant-select-selection--single" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false" data-reactid="11"><div class="ant-select-selection__rendered" data-reactid="12"><div style="display:block;user-select:none;-webkit-user-select:none;" unselectable="unselectable" class="ant-select-selection__placeholder" data-reactid="13">搜索组件...</div><ul data-reactid="14"><li class="ant-select-search ant-select-search--inline" data-reactid="15"><div class="ant-select-search__field__wrap" data-reactid="16"><input value="" class="ant-select-search__field" data-reactid="17"/><span class="ant-select-search__field__mirror" data-reactid="18"><!-- react-text: 19 --><!-- /react-text --><!-- react-text: 20 --> <!-- /react-text --></span></div></li></ul></div><span class="ant-select-arrow" style="user-select:none;-webkit-user-select:none;" unselectable="unselectable" data-reactid="21"><b data-reactid="22"></b></span></div></div></div><button type="button" class="ant-btn ant-btn-ghost ant-btn-sm lang" data-reactid="23"><span data-reactid="24">EN</span></button><div class="ant-select-sm version ant-select ant-select-enabled" data-reactid="25"><div class="ant-select-selection
ant-select-selection--single" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false" tabindex="0" data-reactid="26"><div class="ant-select-selection__rendered" data-reactid="27"><div class="ant-select-selection-selected-value" title="2.8.1" style="display:block;opacity:1;" data-reactid="28">2.8.1</div></div><span class="ant-select-arrow" style="user-select:none;-webkit-user-select:none;" unselectable="unselectable" data-reactid="29"><b data-reactid="30"></b></span></div></div><ul class="ant-menu ant-menu-horizontal ant-menu-light ant-menu-root" role="menu" aria-activedescendant="" id="nav" tabindex="0" data-reactid="31"><li class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="32"><a href="/index-cn" data-reactid="33"><span data-reactid="34">首页</span></a></li><li class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="35"><a href="/docs/spec/introduce-cn" data-reactid="36"><span data-reactid="37">规范</span></a></li><li class="ant-menu-item-selected ant-menu-item" role="menuitem" aria-selected="true" data-reactid="38"><a href="/docs/react/introduce-cn" data-reactid="39"><span data-reactid="40">组件</span></a></li><li class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="41"><a href="/docs/pattern/navigation-cn" data-reactid="42"><span data-reactid="43">模式</span></a></li><li class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="44"><a href="/docs/resource/download-cn" data-reactid="45"><span data-reactid="46">资源</span></a></li></ul></div></div></header><div class="main-wrapper" data-reactid="47"><div class="ant-row" data-reactid="48"><div class="ant-col-xs-24 ant-col-sm-24 ant-col-md-6 ant-col-lg-4" data-reactid="49"><ul class="ant-menu ant-menu-inline aside-container ant-menu-light ant-menu-root" role="menu" aria-activedescendant="" tabindex="0" data-reactid="50"><li style="padding-left:24px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="51"><a href="/docs/react/introduce-cn" data-reactid="52">Ant Design of React</a></li><li style="padding-left:24px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="53"><a href="/docs/react/getting-started-cn" data-reactid="54">快速上手</a></li><li style="padding-left:24px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="55"><a href="/docs/react/practical-projects-cn" data-reactid="56">项目实战</a></li><li style="padding-left:24px;" class="ant-menu-item-selected ant-menu-item" role="menuitem" aria-selected="true" data-reactid="57"><a href="/docs/react/use-with-create-react-app-cn" data-reactid="58">在 create-react-app 中使用</a></li><li style="padding-left:24px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="59"><a href="/docs/react/customize-theme-cn" data-reactid="60">定制主题</a></li><li style="padding-left:24px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="61"><a href="/changelog-cn" data-reactid="62">更新日志</a></li><li style="padding-left:24px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="63"><a href="/docs/react/recommendation-cn" data-reactid="64">社区精选组件</a></li><li style="padding-left:24px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="65"><a href="https://github.com/websemantics/awesome-ant-design" target="_blank" rel="noopener noreferrer" class="menu-item-link-outside" data-reactid="66"><!-- react-text: 67 -->Awesome Ant Design<!-- /react-text --><!-- react-text: 68 --> <!-- /react-text --><i class="anticon anticon-export" data-reactid="69"></i></a></li><li style="padding-left:24px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="70"><a href="//github.com/ant-design/intl-example" target="_blank" rel="noopener noreferrer" class="menu-item-link-outside" data-reactid="71"><!-- react-text: 72 -->i18n 方案<!-- /react-text --><!-- react-text: 73 --> <!-- /react-text --><i class="anticon anticon-export" data-reactid="74"></i></a></li><li class="ant-menu-submenu-inline ant-menu-submenu-open ant-menu-submenu" data-reactid="75"><div style="padding-left:24px;" class="ant-menu-submenu-title" aria-expanded="true" aria-owns="Components$Menu" aria-haspopup="true" data-reactid="76"><h4 data-reactid="77">Components</h4></div><ul class="ant-menu ant-menu-inline ant-menu-sub" role="menu" aria-activedescendant="" id="Components$Menu" data-reactid="78"><li class=" ant-menu-item-group" data-reactid="79"><div class="ant-menu-item-group-title" data-reactid="80">General</div><ul class="ant-menu-item-group-list" data-reactid="81"><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="82"><a href="/components/button-cn/" data-reactid="83"><span data-reactid="84">Button</span><span class="chinese" data-reactid="85">按钮</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="86"><a href="/components/icon-cn/" data-reactid="87"><span data-reactid="88">Icon</span><span class="chinese" data-reactid="89">图标</span></a></li></ul></li><li class=" ant-menu-item-group" data-reactid="90"><div class="ant-menu-item-group-title" data-reactid="91">Layout</div><ul class="ant-menu-item-group-list" data-reactid="92"><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="93"><a href="/components/grid-cn/" data-reactid="94"><span data-reactid="95">Grid</span><span class="chinese" data-reactid="96">栅格</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="97"><a href="/components/layout-cn/" data-reactid="98"><span data-reactid="99">Layout</span><span class="chinese" data-reactid="100">布局</span></a></li></ul></li><li class=" ant-menu-item-group" data-reactid="101"><div class="ant-menu-item-group-title" data-reactid="102">Navigation</div><ul class="ant-menu-item-group-list" data-reactid="103"><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="104"><a href="/components/affix-cn/" data-reactid="105"><span data-reactid="106">Affix</span><span class="chinese" data-reactid="107">固钉</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="108"><a href="/components/breadcrumb-cn/" data-reactid="109"><span data-reactid="110">Breadcrumb</span><span class="chinese" data-reactid="111">面包屑</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="112"><a href="/components/back-top-cn/" data-reactid="113"><span data-reactid="114">BackTop</span><span class="chinese" data-reactid="115">回到顶部</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="116"><a href="/components/dropdown-cn/" data-reactid="117"><span data-reactid="118">Dropdown</span><span class="chinese" data-reactid="119">下拉菜单</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="120"><a href="/components/menu-cn/" data-reactid="121"><span data-reactid="122">Menu</span><span class="chinese" data-reactid="123">导航菜单</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="124"><a href="/components/pagination-cn/" data-reactid="125"><span data-reactid="126">Pagination</span><span class="chinese" data-reactid="127">分页</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="128"><a href="/components/steps-cn/" data-reactid="129"><span data-reactid="130">Steps</span><span class="chinese" data-reactid="131">步骤条</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="132"><a href="/components/tabs-cn/" data-reactid="133"><span data-reactid="134">Tabs</span><span class="chinese" data-reactid="135">标签页</span></a></li></ul></li><li class=" ant-menu-item-group" data-reactid="136"><div class="ant-menu-item-group-title" data-reactid="137">Data Entry</div><ul class="ant-menu-item-group-list" data-reactid="138"><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="139"><a href="/components/auto-complete-cn/" data-reactid="140"><span data-reactid="141">AutoComplete</span><span class="chinese" data-reactid="142">自动完成</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="143"><a href="/components/cascader-cn/" data-reactid="144"><span data-reactid="145">Cascader</span><span class="chinese" data-reactid="146">级联选择</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="147"><a href="/components/checkbox-cn/" data-reactid="148"><span data-reactid="149">Checkbox</span><span class="chinese" data-reactid="150">多选框</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="151"><a href="/components/date-picker-cn/" data-reactid="152"><span data-reactid="153">DatePicker</span><span class="chinese" data-reactid="154">日期选择框</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="155"><a href="/components/form-cn/" data-reactid="156"><span data-reactid="157">Form</span><span class="chinese" data-reactid="158">表单</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="159"><a href="/components/input-cn/" data-reactid="160"><span data-reactid="161">Input</span><span class="chinese" data-reactid="162">输入框</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="163"><a href="/components/input-number-cn/" data-reactid="164"><span data-reactid="165">InputNumber</span><span class="chinese" data-reactid="166">数字输入框</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="167"><a href="/components/mention-cn/" data-reactid="168"><span data-reactid="169">Mention</span><span class="chinese" data-reactid="170">提及</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="171"><a href="/components/rate-cn/" data-reactid="172"><span data-reactid="173">Rate</span><span class="chinese" data-reactid="174">评分</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="175"><a href="/components/radio-cn/" data-reactid="176"><span data-reactid="177">Radio</span><span class="chinese" data-reactid="178">单选框</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="179"><a href="/components/select-cn/" data-reactid="180"><span data-reactid="181">Select</span><span class="chinese" data-reactid="182">选择器</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="183"><a href="/components/slider-cn/" data-reactid="184"><span data-reactid="185">Slider</span><span class="chinese" data-reactid="186">滑动输入条</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="187"><a href="/components/switch-cn/" data-reactid="188"><span data-reactid="189">Switch</span><span class="chinese" data-reactid="190">开关</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="191"><a href="/components/tree-select-cn/" data-reactid="192"><span data-reactid="193">TreeSelect</span><span class="chinese" data-reactid="194">树选择</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="195"><a href="/components/time-picker-cn/" data-reactid="196"><span data-reactid="197">TimePicker</span><span class="chinese" data-reactid="198">时间选择框</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="199"><a href="/components/transfer-cn/" data-reactid="200"><span data-reactid="201">Transfer</span><span class="chinese" data-reactid="202">穿梭框</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="203"><a href="/components/upload-cn/" data-reactid="204"><span data-reactid="205">Upload</span><span class="chinese" data-reactid="206">上传</span></a></li></ul></li><li class=" ant-menu-item-group" data-reactid="207"><div class="ant-menu-item-group-title" data-reactid="208">Data Display</div><ul class="ant-menu-item-group-list" data-reactid="209"><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="210"><a href="/components/badge-cn/" data-reactid="211"><span data-reactid="212">Badge</span><span class="chinese" data-reactid="213">徽标数</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="214"><a href="/components/calendar-cn/" data-reactid="215"><span data-reactid="216">Calendar</span><span class="chinese" data-reactid="217">日历</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="218"><a href="/components/card-cn/" data-reactid="219"><span data-reactid="220">Card</span><span class="chinese" data-reactid="221">卡片</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="222"><a href="/components/carousel-cn/" data-reactid="223"><span data-reactid="224">Carousel</span><span class="chinese" data-reactid="225">走马灯</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="226"><a href="/components/collapse-cn/" data-reactid="227"><span data-reactid="228">Collapse</span><span class="chinese" data-reactid="229">折叠面板</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="230"><a href="/components/popover-cn/" data-reactid="231"><span data-reactid="232">Popover</span><span class="chinese" data-reactid="233">气泡卡片</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="234"><a href="/components/tooltip-cn/" data-reactid="235"><span data-reactid="236">Tooltip</span><span class="chinese" data-reactid="237">文字提示</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="238"><a href="/components/table-cn/" data-reactid="239"><span data-reactid="240">Table</span><span class="chinese" data-reactid="241">表格</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="242"><a href="/components/tag-cn/" data-reactid="243"><span data-reactid="244">Tag</span><span class="chinese" data-reactid="245">标签</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="246"><a href="/components/timeline-cn/" data-reactid="247"><span data-reactid="248">Timeline</span><span class="chinese" data-reactid="249">时间轴</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="250"><a href="/components/tree-cn/" data-reactid="251"><span data-reactid="252">Tree</span><span class="chinese" data-reactid="253">树形控件</span></a></li></ul></li><li class=" ant-menu-item-group" data-reactid="254"><div class="ant-menu-item-group-title" data-reactid="255">Feedback</div><ul class="ant-menu-item-group-list" data-reactid="256"><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="257"><a href="/components/alert-cn/" data-reactid="258"><span data-reactid="259">Alert</span><span class="chinese" data-reactid="260">警告提示</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="261"><a href="/components/modal-cn/" data-reactid="262"><span data-reactid="263">Modal</span><span class="chinese" data-reactid="264">对话框</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="265"><a href="/components/message-cn/" data-reactid="266"><span data-reactid="267">Message</span><span class="chinese" data-reactid="268">全局提示</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="269"><a href="/components/notification-cn/" data-reactid="270"><span data-reactid="271">Notification</span><span class="chinese" data-reactid="272">通知提醒框</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="273"><a href="/components/progress-cn/" data-reactid="274"><span data-reactid="275">Progress</span><span class="chinese" data-reactid="276">进度条</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="277"><a href="/components/popconfirm-cn/" data-reactid="278"><span data-reactid="279">Popconfirm</span><span class="chinese" data-reactid="280">气泡确认框</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="281"><a href="/components/spin-cn/" data-reactid="282"><span data-reactid="283">Spin</span><span class="chinese" data-reactid="284">加载中</span></a></li></ul></li><li class=" ant-menu-item-group" data-reactid="285"><div class="ant-menu-item-group-title" data-reactid="286">Other</div><ul class="ant-menu-item-group-list" data-reactid="287"><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="288"><a href="/components/anchor-cn/" data-reactid="289"><span data-reactid="290">Anchor</span><span class="chinese" data-reactid="291">锚点</span></a></li><li style="padding-left:48px;" class="ant-menu-item" role="menuitem" aria-selected="false" data-reactid="292"><a href="/components/locale-provider-cn/" data-reactid="293"><span data-reactid="294">LocaleProvider</span><span class="chinese" data-reactid="295">国际化</span></a></li></ul></li></ul></li></ul></div><div class="main-container ant-col-xs-24 ant-col-sm-24 ant-col-md-18 ant-col-lg-20" data-reactid="296"><article class="markdown" data-reactid="297"><h1 data-reactid="298"><!-- react-text: 299 -->在 create-react-app 中使用<!-- /react-text --><a class="edit-button" href="https://github.com/ant-design/ant-design/edit/master/docs/react/use-with-create-react-app.zh-CN.md" data-reactid="300"><i class="anticon anticon-edit" data-reactid="301"></i></a></h1><section class="markdown" data-reactid="302"><p data-reactid="303"><a href="https://github.com/facebookincubator/create-react-app" data-reactid="304"><!-- react-text: 305 -->create-react-app<!-- /react-text --></a><!-- react-text: 306 --> 是业界最优秀的 React 应用开发工具之一,本文会尝试在 create-react-app 创建的工程中使用 antd 组件,并自定义 webpack 的配置以满足各类工程化需求。<!-- /react-text --></p></section><section class="toc" data-reactid="307"><ul data-reactid="308"><li data-reactid="309"><a class="bisheng-toc-h2" href="#安装和初始化" data-reactid="310"><!-- react-text: 311 -->安装和初始化<!-- /react-text --></a></li><li data-reactid="312"><a class="bisheng-toc-h2" href="#引入-antd" data-reactid="313"><!-- react-text: 314 -->引入 antd<!-- /react-text --></a></li><li data-reactid="315"><a class="bisheng-toc-h2" href="#高级配置" data-reactid="316"><!-- react-text: 317 -->高级配置<!-- /react-text --></a></li><li data-reactid="318"><a class="bisheng-toc-h2" href="#源码和其他脚手架" data-reactid="319"><!-- react-text: 320 -->源码和其他脚手架<!-- /react-text --></a></li></ul></section><section class="markdown" data-reactid="321"><h2 id="安装和初始化" data-reactid="322"><span data-reactid="323"><!-- react-text: 324 -->安装和初始化<!-- /react-text --></span><a href="#安装和初始化" class="anchor" data-reactid="325">#</a></h2><p data-reactid="326"><!-- react-text: 327 -->我们需要在命令行中安装 create-react-app 工具,你可能还需要安装 <!-- /react-text --><a href="https://github.com/yarnpkg/yarn/" data-reactid="328"><!-- react-text: 329 -->yarn<!-- /react-text --></a><!-- react-text: 330 --><!-- /react-text --></p><pre class="language-bash" data-reactid="331"><code data-reactid="332">$ <span class="token function">npm</span> <span class="token function">install</span> -g create-react-app yarn</code></pre><p data-reactid="333"><!-- react-text: 334 -->然后新建一个项目。<!-- /react-text --></p><pre class="language-bash" data-reactid="335"><code data-reactid="336">$ create-react-app antd-demo</code></pre><p data-reactid="337"><!-- react-text: 338 -->工具会自动初始化一个脚手架并安装 React 项目的各种必要依赖,如果在过程中出现网络问题,请尝试配置代理或使用其他 npm registry。<!-- /react-text --></p><p data-reactid="339"><!-- react-text: 340 -->然后我们进入项目并启动。<!-- /react-text --></p><pre class="language-bash" data-reactid="341"><code data-reactid="342">$ <span class="token function">cd</span> antd-demo
$ yarn start</code></pre><p data-reactid="343"><!-- react-text: 344 -->此时浏览器会访问 <!-- /react-text --><a href="http://localhost:3000/" data-reactid="345"><!-- react-text: 346 -->http://localhost:3000/<!-- /react-text --></a><!-- react-text: 347 --> ,看到 <!-- /react-text --><code data-reactid="348"><!-- react-text: 349 -->Welcome to React<!-- /react-text --></code><!-- react-text: 350 --> 的界面就算成功了。<!-- /react-text --></p><h2 id="引入-antd" data-reactid="351"><span data-reactid="352"><!-- react-text: 353 -->引入 antd<!-- /react-text --></span><a href="#引入-antd" class="anchor" data-reactid="354">#</a></h2><p data-reactid="355"><!-- react-text: 356 -->这是 create-react-app 生成的默认目录结构。<!-- /react-text --></p><pre class="language-null" data-reactid="357"><code data-reactid="358">├── README<span class="token punctuation">.</span>md
├── package<span class="token punctuation">.</span>json
├── public
│ ├── favicon<span class="token punctuation">.</span>ico
│ └── index<span class="token punctuation">.</span>html
├── src
│ ├── App<span class="token punctuation">.</span>css
│ ├── App<span class="token punctuation">.</span>js
│ ├── App<span class="token punctuation">.</span>test<span class="token punctuation">.</span>js
│ ├── index<span class="token punctuation">.</span>css
│ ├── index<span class="token punctuation">.</span>js
│ └── logo<span class="token punctuation">.</span>svg
└── yarn<span class="token punctuation">.</span>lock</code></pre><p data-reactid="359"><!-- react-text: 360 -->现在从 yarn 或 npm 安装并引入 antd。<!-- /react-text --></p><pre class="language-bash" data-reactid="361"><code data-reactid="362">$ yarn add antd --save</code></pre><p data-reactid="363"><!-- react-text: 364 -->修改 <!-- /react-text --><code data-reactid="365"><!-- react-text: 366 -->src/App.js<!-- /react-text --></code><!-- react-text: 367 -->,引入 antd 的按钮组件。<!-- /react-text --></p><pre class="language-jsx" data-reactid="368"><code data-reactid="369"><span class="token keyword">import</span> React<span class="token punctuation">,</span> <span class="token punctuation">{</span> Component <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> Button <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'antd'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token string">'./App.css'</span><span class="token punctuation">;</span>
<span class="token keyword">class</span> <span class="token class-name">App</span> <span class="token keyword">extends</span> <span class="token class-name">Component</span> <span class="token punctuation">{</span>
<span class="token function">render</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token punctuation">(</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">className</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>App<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Button</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>primary<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Button<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>Button</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">></span></span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> App<span class="token punctuation">;</span></code></pre><p data-reactid="370"><!-- react-text: 371 -->修改 <!-- /react-text --><code data-reactid="372"><!-- react-text: 373 -->src/App.css<!-- /react-text --></code><!-- react-text: 374 -->,在文件顶部引入 <!-- /react-text --><code data-reactid="375"><!-- react-text: 376 -->antd/dist/antd.css<!-- /react-text --></code><!-- react-text: 377 --><!-- /react-text --></p><pre class="language-css" data-reactid="378"><code data-reactid="379"><span class="token atrule"><span class="token rule">@import</span> <span class="token string">'~antd/dist/antd.css'</span><span class="token punctuation">;</span></span>
<span class="token selector"><span class="token class">.App</span> </span><span class="token punctuation">{</span>
<span class="token property">text-align</span><span class="token punctuation">:</span> center<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token number">...</span></code></pre><p data-reactid="380"><!-- react-text: 381 -->好了,现在你应该能看到页面上已经有了 antd 的蓝色按钮组件,接下来就可以继续选用其他组件开发应用了。其他开发流程你可以参考 create-react-app 的<!-- /react-text --><a href="https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md" data-reactid="382"><!-- react-text: 383 -->官方文档<!-- /react-text --></a><!-- react-text: 384 --><!-- /react-text --></p><h2 id="高级配置" data-reactid="385"><span data-reactid="386"><!-- react-text: 387 -->高级配置<!-- /react-text --></span><a href="#高级配置" class="anchor" data-reactid="388">#</a></h2><p data-reactid="389"><!-- react-text: 390 -->我们现在已经把组件成功运行起来了,但是在实际开发过程中还有很多问题,例如上面的例子实际上加载了全部的 antd 组件的代码(对前端性能是个隐患)。<!-- /react-text --></p><blockquote data-reactid="391"><p data-reactid="392"><!-- react-text: 393 -->你会在控制台看到如下警告。
<!-- /react-text --><img src="https://zos.alipayobjects.com/rmsportal/vgcHJRVZFmPjAawwVoXK.png" data-reactid="394"/></p></blockquote><p data-reactid="395"><!-- react-text: 396 -->我们需要对 create-react-app 的默认配置进行自定义。可以使用 <!-- /react-text --><code data-reactid="397"><!-- react-text: 398 -->eject<!-- /react-text --></code><!-- react-text: 399 --> 命令将所有内建的配置暴露出来。<!-- /react-text --></p><pre class="language-bash" data-reactid="400"><code data-reactid="401">$ yarn run <span class="token function">eject</span></code></pre><h3 id="按需加载" data-reactid="402"><span data-reactid="403"><!-- react-text: 404 -->按需加载<!-- /react-text --></span><a href="#按需加载" class="anchor" data-reactid="405">#</a></h3><p data-reactid="406"><a href="https://github.com/ant-design/babel-plugin-import" data-reactid="407"><!-- react-text: 408 -->babel-plugin-import<!-- /react-text --></a><!-- react-text: 409 --> 是一个用于按需加载组件代码和样式的 babel 插件(<!-- /react-text --><a href="/docs/react/getting-started-cn#按需加载" data-reactid="410">原理</a><!-- react-text: 411 -->),现在我们尝试安装它并修改 <!-- /react-text --><code data-reactid="412"><!-- react-text: 413 -->config/webpack.config.dev.js<!-- /react-text --></code><!-- react-text: 414 --> 文件。<!-- /react-text --></p><pre class="language-bash" data-reactid="415"><code data-reactid="416">$ yarn add babel-plugin-import --save-dev</code></pre><pre class="language-diff" data-reactid="417"><code data-reactid="418">// Process JS with Babel.
{
test: /\.(js|jsx)$/,
include: paths.appSrc,
loader: 'babel',
query: {
<span class="token inserted">+ plugins: [</span>
<span class="token inserted">+ ['import', [{ libraryName: "antd", style: 'css' }]],</span>
<span class="token inserted">+ ],</span>
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
cacheDirectory: true
}
},</code></pre><blockquote data-reactid="419"><p data-reactid="420"><!-- react-text: 421 -->注意,由于 create-react-app eject 之后的配置中没有 <!-- /react-text --><code data-reactid="422"><!-- react-text: 423 -->.babelrc<!-- /react-text --></code><!-- react-text: 424 --> 文件,所以需要把配置放到 <!-- /react-text --><code data-reactid="425"><!-- react-text: 426 -->webpack.config.js<!-- /react-text --></code><!-- react-text: 427 --><!-- /react-text --><code data-reactid="428"><!-- react-text: 429 -->package.json<!-- /react-text --></code><!-- react-text: 430 --><!-- /react-text --><code data-reactid="431"><!-- react-text: 432 -->babel<!-- /react-text --></code><!-- react-text: 433 --> 属性中。<!-- /react-text --></p></blockquote><p data-reactid="434"><!-- react-text: 435 -->然后移除前面在 <!-- /react-text --><code data-reactid="436"><!-- react-text: 437 -->src/App.css<!-- /react-text --></code><!-- react-text: 438 --> 里全量添加的 <!-- /react-text --><code data-reactid="439"><!-- react-text: 440 -->@import &#x27;~antd/dist/antd.css&#x27;;<!-- /react-text --></code><!-- react-text: 441 --> 样式代码,现在 babel-plugin-import 会按需加载样式。<!-- /react-text --></p><p data-reactid="442"><!-- react-text: 443 -->最后重启 <!-- /react-text --><code data-reactid="444"><!-- react-text: 445 -->yarn start<!-- /react-text --></code><!-- react-text: 446 --> 访问页面,此时上面的警告信息应该没了,antd 组件的 js 和 css 代码都会按需加载。<!-- /react-text --></p><h3 id="自定义主题" data-reactid="447"><span data-reactid="448"><!-- react-text: 449 -->自定义主题<!-- /react-text --></span><a href="#自定义主题" class="anchor" data-reactid="450">#</a></h3><p data-reactid="451"><!-- react-text: 452 -->按照 <!-- /react-text --><a href="/docs/react/customize-theme-cn" data-reactid="453">配置主题</a><!-- react-text: 454 --> 的要求,自定义主题需要用到 less 变量覆盖功能,因此首先我们需要引入 <!-- /react-text --><a href="https://github.com/webpack/less-loader" data-reactid="455"><!-- react-text: 456 -->less-loader<!-- /react-text --></a><!-- react-text: 457 --> 来加载 less 样式,同时修改 <!-- /react-text --><code data-reactid="458"><!-- react-text: 459 -->config/webpack.config.dev.js<!-- /react-text --></code><!-- react-text: 460 --> 文件。<!-- /react-text --></p><pre class="language-bash" data-reactid="461"><code data-reactid="462">$ yarn add <span class="token function">less</span> less-loader --save-dev</code></pre><pre class="language-diff" data-reactid="463"><code data-reactid="464">loaders: [
{
exclude: [
/\.html$/,
/\.(js|jsx)$/,
<span class="token inserted">+ /\.less$/,</span>
/\.css$/,
/\.json$/,
/\.svg$/
],
loader: 'url',
},
...
// Process JS with Babel.
{
test: /\.(js|jsx)$/,
include: paths.appSrc,
loader: 'babel',
query: {
plugins: [
<span class="token deleted">- ['import', [{ libraryName: "antd", style: 'css' }]],</span>
<span class="token inserted">+ ['import', [{ libraryName: "antd", style: true }]], // 加载 less 文件</span>
],
},
...
<span class="token inserted">+ // 解析 less 文件,并加入变量覆盖配置</span>
<span class="token inserted">+ {</span>
<span class="token inserted">+ test: /\.less$/,</span>
<span class="token inserted">+ loader: 'style!css!postcss!less?{modifyVars:{"@primary-color":"#1DA57A"}}'</span>
<span class="token inserted">+ },</span>
]</code></pre><p data-reactid="465"><!-- react-text: 466 -->这里利用了 <!-- /react-text --><a href="https://github.com/webpack/less-loader#less-options" data-reactid="467"><!-- react-text: 468 -->less-loader<!-- /react-text --></a><!-- react-text: 469 --><!-- /react-text --><code data-reactid="470"><!-- react-text: 471 -->modifyVars<!-- /react-text --></code><!-- react-text: 472 --> 来进行主题配置,
变量和其他配置方式可以参考 <!-- /react-text --><a href="/docs/react/customize-theme-cn" data-reactid="473">配置主题</a><!-- react-text: 474 --> 文档。<!-- /react-text --></p><p data-reactid="475"><!-- react-text: 476 -->修改后重启 <!-- /react-text --><code data-reactid="477"><!-- react-text: 478 -->yarn start<!-- /react-text --></code><!-- react-text: 479 -->,如果看到一个绿色的按钮就说明配置成功了。<!-- /react-text --></p><h2 id="源码和其他脚手架" data-reactid="480"><span data-reactid="481"><!-- react-text: 482 -->源码和其他脚手架<!-- /react-text --></span><a href="#源码和其他脚手架" class="anchor" data-reactid="483">#</a></h2><p data-reactid="484"><!-- react-text: 485 -->以上是在 create-react-app 中使用 antd 的相关实践,你也可以借鉴此文的做法在自己的 webpack 工作流中使用 antd,更多 webpack 配置可参考 <!-- /react-text --><a href="https://github.com/ant-tool/atool-build/blob/master/src/getWebpackCommonConfig.js" data-reactid="486"><!-- react-text: 487 -->atool-build<!-- /react-text --></a><!-- react-text: 488 -->。(例如加入 <!-- /react-text --><a href="https://github.com/ant-tool/atool-build/blob/e4bd2959689b6a95cb5c1c854a5db8c98676bdb3/src/getWebpackCommonConfig.js#L90" data-reactid="489"><!-- react-text: 490 -->moment noParse<!-- /react-text --></a><!-- react-text: 491 --> 避免加载所有语言文件)<!-- /react-text --></p><p data-reactid="492"><!-- react-text: 493 -->React 生态圈中还有很多优秀的脚手架,使用它们并引入 antd 时,你可能会遇到一些问题,下面是一些著名脚手架使用 antd 的范例,包括本文的 create-react-app。<!-- /react-text --></p><ul data-reactid="494"><li data-reactid="495"><p data-reactid="496"><a href="https://github.com/ant-design/react-boilerplate" data-reactid="497"><!-- react-text: 498 -->react-boilerplate/react-boilerplate<!-- /react-text --></a></p></li><li data-reactid="499"><p data-reactid="500"><a href="https://github.com/ant-design/react-starter-kit" data-reactid="501"><!-- react-text: 502 -->kriasoft/react-starter-kit<!-- /react-text --></a></p></li><li data-reactid="503"><p data-reactid="504"><a href="https://github.com/ant-design/create-react-app-antd" data-reactid="505"><!-- react-text: 506 -->create-react-app-antd<!-- /react-text --></a></p></li></ul></section></article></div></div><div class="ant-row" data-reactid="507"><div class="ant-col-xs-24 ant-col-sm-24 ant-col-md-18 ant-col-md-offset-6 ant-col-lg-20 ant-col-lg-offset-4" data-reactid="508"><section class="prev-next-nav" data-reactid="509"><a class="prev-page" href="/docs/react/practical-projects-cn" data-reactid="510">项目实战</a><a class="next-page" href="/docs/react/customize-theme-cn" data-reactid="511">定制主题</a></section></div></div></div><footer id="footer" data-reactid="512"><ul data-reactid="513"><li data-reactid="514"><h2 data-reactid="515"><i class="anticon anticon-github" data-reactid="516"></i><!-- react-text: 517 --> GitHub<!-- /react-text --></h2><div data-reactid="518"><a target="_blank " href="https://github.com/ant-design/ant-design" data-reactid="519"><span data-reactid="520">仓库</span></a></div><div data-reactid="521"><a target="_blank " href="https://ant.design/docs/react/customize-theme" data-reactid="522"><span data-reactid="523">定制主题</span></a></div><div data-reactid="524"><a target="_blank " href="https://github.com/websemantics/awesome-ant-design" data-reactid="525"><span data-reactid="526">Awesome Ant Design</span></a></div></li><li data-reactid="527"><h2 data-reactid="528"><i class="anticon anticon-link" data-reactid="529"></i><!-- react-text: 530 --> <!-- /react-text --><span data-reactid="531">相关站点</span></h2><div data-reactid="532"><a href="http://mobile.ant.design" data-reactid="533">Ant Design Mobile</a><span data-reactid="534"> - </span><span data-reactid="535">移动版</span></div><div data-reactid="536"><a target="_blank" rel="noopener noreferrer" href="https://github.com/dvajs/dva" data-reactid="537">dva</a><!-- react-text: 538 --> - <!-- /react-text --><span data-reactid="539">应用框架</span></div><div data-reactid="540"><a target="_blank" rel="noopener noreferrer" href="https://github.com/dvajs/dva-cli" data-reactid="541">dva-cli</a><!-- react-text: 542 --> -<!-- /react-text --><span data-reactid="543">开发工具</span></div><div data-reactid="544"><a target="_blank" rel="noopener noreferrer" href="https://eggjs.org/" data-reactid="545">Egg</a><span data-reactid="546"> - </span><span data-reactid="547">企业级 Node 开发框架</span></div><div data-reactid="548"><a target="_blank" rel="noopener noreferrer" href="https://antv.alipay.com/" data-reactid="549">AntV</a><span data-reactid="550"> - </span><span data-reactid="551">数据可视化</span></div><div data-reactid="552"><a target="_blank" rel="noopener noreferrer" href="http://motion.ant.design" data-reactid="553">Ant Motion</a><span data-reactid="554"> - </span><span data-reactid="555">设计动效</span></div><div data-reactid="556"><a target="_blank" rel="noopener noreferrer" href="http://library.ant.design/" data-reactid="557">AntD Library</a><span data-reactid="558"> - </span><span data-reactid="559">Axure 部件库</span></div><div data-reactid="560"><a target="_blank" rel="noopener noreferrer" href="http://ux.ant.design" data-reactid="561">Ant UX</a><span data-reactid="562"> - </span><span data-reactid="563">页面逻辑素材</span></div></li><li data-reactid="564"><h2 data-reactid="565"><i class="anticon anticon-customer-service" data-reactid="566"></i><!-- react-text: 567 --> <!-- /react-text --><span data-reactid="568">社区</span></h2><div data-reactid="569"><a href="/changelog" data-reactid="570"><span data-reactid="571">更新记录</span></a></div><div data-reactid="572"><a target="_blank" rel="noopener noreferrer" href="https://github.com/ant-design/ant-design/wiki/FAQ" data-reactid="573"><span data-reactid="574">常见问题</span></a></div><div data-reactid="575"><a target="_blank" rel="noopener noreferrer" href="https://gitter.im/ant-design/ant-design" data-reactid="576"><span data-reactid="577">在线讨论</span></a></div><div data-reactid="578"><a target="_blank" rel="noopener noreferrer" href="https://github.com/ant-design/ant-design/issues/new" data-reactid="579"><span data-reactid="580">报告 Bug</span></a></div><div data-reactid="581"><a target="_blank" rel="noopener noreferrer" href="http://stackoverflow.com/questions/tagged/antd" data-reactid="582"><span data-reactid="583">StackOverflow</span></a></div><div data-reactid="584"><a target="_blank" rel="noopener noreferrer" href="https://segmentfault.com/t/antd" data-reactid="585"><span data-reactid="586">SegmentFault</span></a></div></li><li data-reactid="587"><h2 data-reactid="588"><!-- react-text: 589 -->Copyright © <!-- /react-text --><!-- react-text: 590 -->2017<!-- /react-text --></h2><div data-reactid="591"><span data-reactid="592">蚂蚁金服体验技术部出品</span></div><div data-reactid="593"><!-- react-text: 594 -->Built with <!-- /react-text --><a target="_blank" rel="noopener noreferrer" href="https://github.com/benjycui/bisheng" data-reactid="595">BiSheng</a></div></li></ul></footer></div>
</div>
<script src="/common.js"></script>
<script src="/index.js"></script>
</body>
</html>