Π ΡΡΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΡΠΎΠ±ΡΠ°Π½ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΎΠ½Π»Π°ΠΉΠ½-ΠΊΡΡΡΠ° "React+Redux - ΠΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°".
ΠΠΠΠΠΠΠΠ! SWAPI.co Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ
Π Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡΡ
ΡΡΠΎΠ³ΠΎ ΠΊΡΡΡΠ° ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ swapi.co Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· API. SWAPI.co Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΡΠΎΠΌ. ΠΠ΄ΡΠ΅Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° - https://swapi.dev. ΠΠΎΠΊΠ° ΡΡΠΎ ΠΊΠΎΠ΄ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ API Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ "ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ". Π§ΡΠΎΠ±Ρ ΠΏΡΠΈΠΌΠ΅ΡΡ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ, Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ src/services/swapi-service.js
:
// _apiBase = 'https://swapi.co/api';
// Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π°
_apiBase = 'https://swapi.dev/api';
Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ - ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ΡΡΡ ΡΠ²ΠΎΡ ΠΏΠ°ΠΏΠΊΠ°, Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΏΠΎΠ΄-ΠΏΠ°ΠΏΠΊΠΈ. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ - ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΡΡΡΠ°. ΠΠ΅ΡΠ΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ Π΅ΡΡΡ ΡΠΈΡΡΠΎ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΏΠΎΠΊ Π² Ρ ΡΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠΈΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΠΏΠΎΠΊ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ ΡΡΠΎΠΊΡ ΠΏΡΠ΅Π½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΊΠΎΠ΄. ΠΠΎΠ΄ Π·Π°ΠΏΠΈΡΠ°Π½ Π² Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΡΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·Π°Π½ Π² ΡΠΏΠΈΡΠΊΠ΅. Π’ΠΎ Π΅ΡΡΡ, Π² ΠΏΠ°ΠΏΠΊΠ΅ todo/10-elements
Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ΄, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ½ Π±ΡΠ» ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠΊΠ° "React ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ".
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ "Π‘ΠΏΠΈΡΠΎΠΊ ΠΠ΅Π»" (ΠΏΠ΅ΡΠ²ΡΠ΅ 5 ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² ΠΊΡΡΡΠ°)
00-empty-react-project - ΠΏΡΡΡΠΎΠΉ React ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. Π Π°Π·Π΄Π΅Π» 3, ΡΡΠΎΠΊ "Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΠΏΡΡΡΠΎΠΉ React ΠΏΡΠΎΠ΅ΠΊΡ"
10-elements - Π Π°Π·Π΄Π΅Π» 3, "React ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ"
20-components - Π Π°Π·Π΄Π΅Π» 3, "React ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ"
30-project-structure - Π Π°Π·Π΄Π΅Π» 3, "Π‘ΡΡΡΠΊΡΡΡΠ° React ΠΡΠΎΠ΅ΠΊΡΠ°"
40-props - Π Π°Π·Π΄Π΅Π» 3, "Props - ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²"
50-arrays-as-props - Π Π°Π·Π΄Π΅Π» 3, "ΠΠ°ΡΡΠΈΠ²Ρ, ΠΊΠ°ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²"
60-collections-and-keys - Π Π°Π·Π΄Π΅Π» 3, "ΠΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΈ ΠΊΠ»ΡΡΠΈ"
70-importing-css - Π Π°Π·Π΄Π΅Π» 3, "ΠΠ°ΠΊ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ css"
80-folder-per-component - Π Π°Π·Π΄Π΅Π» 3, "Π‘ΡΡΡΠΊΡΡΡΠ° React ΠΏΡΠΎΠ΅ΠΊΡΠ° - ΡΠ°ΡΡΡ 2"
90-events-and-state - Π Π°Π·Π΄Π΅Π» 4, "ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ setState()" (Π² ΠΏΠ΅ΡΠ²ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠΎΠΊΠ°Ρ 4-Π³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠΊΠΎΠ² Π²ΠΌΠ΅ΡΡΠ΅)
100-adding-removing-items - Π Π°Π·Π΄Π΅Π» 4, "setState() - ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²"
120-handling-forms - Π Π°Π·Π΄Π΅Π» 4, "Π Π°Π±ΠΎΡΠ° Ρ ΡΠΎΡΠΌΠ°ΠΌΠΈ"
todo-final - Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° 5: "ΠΠ°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΠΌ Todo App"
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Star DB
00-basic-project-structure - Π Π°Π·Π΄Π΅Π» 6, "Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ StarDB"
10-transforming-api-data - Π Π°Π·Π΄Π΅Π» 6, "Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ API"
20-handling-api-errors - Π Π°Π·Π΄Π΅Π» 6, "ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠ΅ΡΠΈ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅"
30-lifecycle-intro - Π Π°Π·Π΄Π΅Π» 7, "ΠΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» - Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅"
40-component-did-mount-practice - Π Π°Π·Π΄Π΅Π» 7, "ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ componentDidMount()"
50-component-did-update - Π Π°Π·Π΄Π΅Π» 7, "ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ componentDidUpdate()"
60-error-boundries - Π Π°Π·Π΄Π΅Π» 7, "ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ componentDidCatch() Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅"
70-passing-function-as-data-sources - Π Π°Π·Π΄Π΅Π» 8, "ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ"
80-children - Π Π°Π·Π΄Π΅Π» 8, "Children"
90-cloning-elements - Π Π°Π·Π΄Π΅Π» 8, "ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²"
100-higher-order-components - Π Π°Π·Π΄Π΅Π» 8, "ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° (HOC)"
110-hoc-composition - Π Π°Π·Π΄Π΅Π» 8, "ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°"
120-context - Π Π°Π·Π΄Π΅Π» 8, "ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Context API"
130-hoc-context - Π Π°Π·Π΄Π΅Π» 8, "Π’ΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ props Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°"
140-dynamic-context-switch - Π Π°Π·Π΄Π΅Π» 8, "ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°"
150-prop-types - Π Π°Π·Π΄Π΅Π» 8, "ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ prop-types"
160-basic-routing - Π Π°Π·Π΄Π΅Π» 9, "ΠΡΠ½ΠΎΠ²Ρ react-router"
170-how-routing-works - PΠ°Π·Π΄Π΅Π» 9, "ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Route"
180-relative-paths - PΠ°Π·Π΄Π΅Π» 9, "ΠΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΡΠΈ"
190-relative-paths - PΠ°Π·Π΄Π΅Π» 9, "Switch (ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ²)"
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Redux Sandbox (ΡΠ°Π·Π΄Π΅Π» 10)
10-redux-ui - PΠ°Π·Π΄Π΅Π» 10, "UI Π΄Π»Ρ Redux"
20-bind-action-creators - PΠ°Π·Π΄Π΅Π» 10, "bindActionCreators()"
30-react-with-redux - PΠ°Π·Π΄Π΅Π» 10, "ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ React ΠΈ Redux"
40-connect-map-state-to-props - PΠ°Π·Π΄Π΅Π» 10, "react-redux ΠΈ ΡΡΠ½ΠΊΡΠΈΡ connect()"
50-map-dispatch-to-props - PΠ°Π·Π΄Π΅Π» 10, "mapDispatchToProps()"
60-map-dispatch-to-props-as-object - Π Π°Π·Π΄Π΅Π» 10, "mapDispatchToProps Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°"
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ReStore
10-create-basic-components - PΠ°Π·Π΄Π΅Π» 11, "ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ"
20-redux-components - PΠ°Π·Π΄Π΅Π» 11, "Redux ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ"
30-connecting-components - PΠ°Π·Π΄Π΅Π» 11, "ΠΡΠΏΡΠ°Π²ΠΊΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π² Redux Store (action dispatch)"
40-adding-styles - PΠ°Π·Π΄Π΅Π» 11, "Π‘ΡΠΈΠ»ΠΈ"
50-async-data - PΠ°Π·Π΄Π΅Π» 11, "Π Π°Π±ΠΎΡΠ° Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ"
60-error-handling - PΠ°Π·Π΄Π΅Π» 11, "ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ"
80-update-element-in-array - PΠ°Π·Π΄Π΅Π» 11, "ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅"
90-delete-element-from-array - PΠ°Π·Π΄Π΅Π» 11, "Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°"
100-organizing-reducer-code - PΠ°Π·Π΄Π΅Π» 11, "ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π° reducer'Π°"
110-store-enhancers - PΠ°Π·Π΄Π΅Π» 11, "Store Enhancers"
120-middleware - PΠ°Π·Π΄Π΅Π» 11, "Middleware"
130-thunk - PΠ°Π·Π΄Π΅Π» 11, "Thunk"
Π‘Π±ΠΎΡΠΊΠ° React ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ - Babel (build-sandbox)
10-empty-project - PΠ°Π·Π΄Π΅Π» 12, "Π‘ΠΎΠ·Π΄Π°ΡΠΌ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ"
20-babel-config-files - PΠ°Π·Π΄Π΅Π» 12, "ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Babel"
30-presets - PΠ°Π·Π΄Π΅Π» 12, "Babel Presets"
40-jsx - PΠ°Π·Π΄Π΅Π» 12, "Π Π°Π±ΠΎΡΠ° Ρ JSX" + "ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ"
Π‘Π±ΠΎΡΠΊΠ° React ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ - WebPack (build-sandbox)
50-webpack-loader - PΠ°Π·Π΄Π΅Π» 13, "WebPack Loader"
60-file-types - PΠ°Π·Π΄Π΅Π» 13, "Loader'Ρ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ²"
70-babel-loader - PΠ°Π·Π΄Π΅Π» 13, "React ΠΈ Babel Loader"
80-loader-composition - PΠ°Π·Π΄Π΅Π» 13, "ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ Loader'ΠΎΠ²"
90-html-templates - PΠ°Π·Π΄Π΅Π» 13, "HtmlWebpackPlugin - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²"
100-dev-server - PΠ°Π·Π΄Π΅Π» 13, "Wepback Dev Server"
110-prod-config - PΠ°Π·Π΄Π΅Π» 13, "ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π»Ρ production"