2. MALÁ ROZCVIČKA - ABYCH VĚDĚL NA CO SE PTÁT :)
• Kdo z vás se považuje za Javascript vývojáře?
• Kdo z vás provozuje a napsal produkční aplikaci v Reactu (16.3)?
• Kdo z vás má v produkci aplikaci na Next.js (6)?
• Kdo používá Bootstrap 4 v produkční aplikaci?
• Kdo používá Redux v produkční aplikaci?
• Kdo používá Redux observables v produkční aplikaci?
• Kdo používá FlowType pro vývoj?
• Kdo z vás má vlastní UI knihovnu?
• Kdo z vás má vlastní UI knihovnu v Reactu?
• Kdo publikuje na NPM?
• Kdo se snaží psát funkcionálně?
3. REDESIGN APLIKACE
TECHNICKÝ
Custom dev stack -> Next.js
Upgrade na React 16.3.1
Upgrade dalších závislostí
VIZUÁLNÍ
Bootstrap 4 beta ->
UI knihovna v Reactu postavena
na ReactStrap
4. PŘECHOD NA NEXT.JS
•SPA v React-Redux -> Aplikace na Next.js
•Nová adresářová struktura
•Node.js ready
•Export do statických souborů
•Famózní Link router (nutný custom middleware pro redirect v
rámci aplikace)
•Prefetch
•Migrace na Yarn
•Next redux wrapper - využít getInitialProps()
5. ADRESÁŘOVÁ STRUKTURA
• Pages není v root, ale v src
(nutno přidat parametr pro next build)
next build src
• pages
• názvy stránek (index, login, …)
• services
• DI, config, API, utils, routing
• static - logger skript, další entries
• styles - SASS
• flow-typed - custom type definitions pro Immutable
• polyfill - immutable, set a map pro React 16
6. REACT REDUX • actions
• redux-observable epics
• helper metody
• state
• immutable state
• helper funkce (funkcionálně)
• reducer
• index
• container komponenta - HOC s connect
• App.js
• React komponenta (Pure)
7. NEXT.CONFIG.JS
module.exports = withBundleAnalyzer(
withSourceMaps(
withCSS(
withSass({
webpack(config, { isServer, buildId, dev }) {
const configOptions = config;
if (!dev) {
const originalEntry = configOptions.entry;
configOptions.entry = async () => {
const entries = await originalEntry();
if (entries['main.js'] &&) {
entries['main.js'].unshift('./polyfill/core-js.js');
}
return entries
};
}),
• kompozice pluginů
• https://github.com/zeit/next-
plugins
• možnost nastavit webpack
• Next.js se kompiluje 2x
(server i client)
• pozor na post-css -> v dev
zpomaluje kompilaci
Přidání polyfillů
8. NEXT.CONFIG.JS
• možnost exportovat do statických
souborů
• potřeba definovat exportPathMap
• getInitialProps je dostupná u top-
level pages s parametry:
• pathname
• query
• asPath
• store - Redux
• res
• req
exportPathMap() {
return {
'/': { page: '/' },
'/prihlaseni': { page: '/prihlaseni' },
'/email-odeslan': { page: '/email-odeslan' },
'/prihlasovani': { page: '/prihlasovani' },
…
};
},
9. NEXT.JS CLIENT
• Pozor na práci s browser objekty
• Export na neošetřené manipulaci s browser objekty nemusí doběhnout
export const isClient = typeof window !== ‘undefined';
const localStorage = isClient ? window.localStorage : LocalStorageMock;
10. NEXT.JS PAGE
import withRedux from 'next-redux-wrapper';
import Layout from '../components/Layout';
import Students from '../components/Students';
import { configureStore } from '../components/Admin/store';
const StudentListPage = () => (
<Layout>
<Students />
</Layout>
);
export default withRedux(configureStore)(StudentListPage);
Pouze v Top-level komponentně
15. NOVÁ UI KNIHOVNA V REACTU
• postaveno na ReactStrapu - https://reactstrap.github.io/
• SASS v rámci UI - Bootstrap 4
• knihovna exportuje jak skripty, tak styly - Rollup
• Autoprefixer, PostCSS (Grid CSS i pro IE 10,11)
• dev na Webpacku
• vytvoření a otestování v rámci UI (responzivní)
• publikování na NPM
• dokumentace (pro UX a vývojáře)
• yarn add seduo-company-ui
• semver
21. FLOW PŘI VÝVOJI
1.přidat React komponentu do src/components (definovat props)
2.přidat styly pro komponentu do src/bootstrap (SASS)
3.importovat a pak exportovat modul v src/index.js
4.přidat novou komponentu do dokumentace (example + properties)
5.změna v changelogu
6.navýšení verze v package.json
7.PR -> zabalení -> nasazení -> test -> merge do masteru -> tag
8.npm publish
"yarn prepare && yarn copy-dist”,
zkopíruje po buildu dist souborů do aplikace
“npm pack”
zabalí do tar souboru (pro nasazení na server bez publikace na NPM)
22. FLOW PŘI VÝVOJI
import Icon from './components/Icon';
import LinkButton from './components/LinkButton';
import ReactSelect from './components/Select';
import Heading from './components/Heading';
import Spinner from './components/Spinner';
import Cover from './components/Cover';
import Navigation from './components/Navigation';
import Footer from './components/Footer';
import SvgIcon from './components/icons/SvgIcon';
export { Alert, Container, Row, Navbar, NavbarBrand, …, Util } from ‘reactstrap’;
export { Icon, LinkButton, ReactSelect, Heading, Spinner, Cover, Navigation, Footer,
SvgIcon };