В последнее время я много делал домашних проектов с целью изучить новую технологию. Понятное дело что не хотелось очень сильно заморачиваться с дизайном, ну и тут на помощь приходят UI фреймворки. Среди всех известных мне UI фреймворков, больше всех меня зацепил Ant Design, своей простой и элегантностью. Слегка поработав с ним я понял что его можно использовать не только в пет-проектах , а и в продакшене. В сети есть много примеров крупных и не очень сайтов где он используется. Но все эти сайты объединяет то что они использую кастомизированную тему.
Инициализация приложения
Для инициализации будем использовать Create react app.Создадим проект с именем ant-setup, переходим в корневую папку проекта и устанавливаем Ant Design с помощью команд:
npx create-react-app ant-setupcd ant-setupyarn add antd
Ждем пока все установиться, открываем проект в редакторе кода и запускаем приложение:
code .yarn start
Настройка Webpack
Далее нужно установить пакеты для переопределения webpack конфигурации:
yarn add babel-plugin-import react-app-rewired customize-cra
После этого изменим скрипты в нашем, package.json
чтобы использовать react-app-rewired
:
"scripts": {"start": "react-app-rewired start","build": "react-app-rewired build","test": "react-app-rewired test","eject": "react-scripts eject"}
После всех этих манипуляций нужно создать файл с именем config-overrides.js
в корневом каталоге проекта с этим кодом:
const { override, fixBabelImports } = require('customize-cra')module.exports = override(fixBabelImports('import', {libraryName: 'antd',libraryDirectory: 'es',style: 'css'}))
Этими строчками мы подключили стили от Ant Design. Хейтер скажет: "Зачем так загоняться, ведь можно просто подключить прописать строчку import 'antd/dist/antd.css'
в index.js
?". Если так сделать, то не получиться норм кастомизировать тему, так написано в документации.
Финальные штрихи
После всей проделанной работы мы можем использовать компоненты Ant Design. В файле App.jsx
я добавил несколько компонентов, и задал стили для демонстрации:
import React from 'react'import { Layout, Menu, Breadcrumb, Button } from 'antd'const { Header, Content, Footer } = Layoutconst App = () => (<Layout style={{ minHeight: '100vh' }}><Header><Menu theme='dark' mode='horizontal' defaultSelectedKeys={['2']}><Menu.Item key='1'>nav 1</Menu.Item><Menu.Item key='2'>nav 2</Menu.Item><Menu.Item key='3'>nav 3</Menu.Item></Menu></Header><Content style={{ padding: '0 50px' }}><Breadcrumb style={{ margin: '16px 0' }}><Breadcrumb.Item>Home</Breadcrumb.Item><Breadcrumb.Item>List</Breadcrumb.Item><Breadcrumb.Item>App</Breadcrumb.Item></Breadcrumb><div style={contentStyle}><Button type='primary'>Primary Button</Button><Button style={{ margin: '0 1rem' }}>Default Button</Button><Button type='dashed'>Dashed Button</Button></div></Content><Footer style={{ textAlign: 'center' }}>Ant Design ©2020 Created by Yeroshenko</Footer></Layout>)const contentStyle = {backgroundColor: '#fff',padding: '24px',minHeight: '280px',display: 'flex',}export default App
Если ваше приложение уже запущено, вам необходимо перезапустить его, чтобы увидеть эти новые изменения.
Если все делали правильно то вы увидите:
Допустим, я решил использовать другой основной цвет. Очень просто!
Теперь осталось установить less
и less-loader
пакеты:
yarn add less less-loader
Затем просто добавить загрузчик LESS в файл config-overrides.js
const { override, fixBabelImports, addLessLoader } = require('customize-cra')module.exports = override(fixBabelImports('import', {libraryName: 'antd',libraryDirectory: 'es',style: true,}),addLessLoader({lessOptions: {javascriptEnabled: true,modifyVars: {'@primary-color': '#7546C9', // custom'@border-radius-base': '8px' // custom},},}))
Результат:
Самой приятное то что Ant Design имеет очень много переменных и можно очень сильно все преобразовать. С списком всех переменных можно ознакомиться по ссылке.
Заключение
В конце хочу сказать что это действительно хорошая библиотека она реально простая в использовании и не настолько заезженная как Bootstrap или Material Ui. И если вы с ней ещё не знакомы то советую ознакомиться. Исходный код.
Опубликовано: 10.06.2020