{"id":31806,"date":"2021-09-08T08:21:54","date_gmt":"2021-09-08T06:21:54","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/styled-components-oraz-usecontext-uzycie-hookow-w-nowoczesnych-aplikacjach-frontendowych\/"},"modified":"2024-10-02T13:02:24","modified_gmt":"2024-10-02T11:02:24","slug":"styled-components-oraz-usecontext-uzycie-hookow-w-nowoczesnych-aplikacjach-frontendowych","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/styled-components-oraz-usecontext-uzycie-hookow-w-nowoczesnych-aplikacjach-frontendowych\/","title":{"rendered":"Styled components oraz useContext \u2013 u\u017cycie hook\u00f3w w nowoczesnych aplikacjach frontendowych"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<div class=\"table-of-contents\">\n    <p class=\"title\"><\/p>\n    <ol>\n                    <li><a href=\"#styled-components\">1.  Styled components<\/a><\/li>\n                    <li><a href=\"#biblioteka-redux-w-kontekscie-hookow\">2.  Biblioteka Redux w kontek\u015bcie\u2026 hook\u00f3w<\/a><\/li>\n                    <li><a href=\"#theming\">3.  Theming<\/a><\/li>\n                    <li><a href=\"#podsumowanie\">4.  Podsumowanie<\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"styled-components\">Styled components<\/h2>\n\n\n\n<p>Styled components to w\u0142a\u015bnie jedna ze wspomnianych przeze mnie wy\u017cej funkcjonalno\u015bci. Styled components jest globalnym rozwi\u0105zaniem dla pisania ostylowanych element\u00f3w w kodzie JavaScript, kt\u00f3re b\u0119d\u0105 stanowi\u0142y komponenty reactowe. Dzi\u0119ki niej jeste\u015bmy w stanie napisa\u0107 ca\u0142o\u015b\u0107 kodu bez u\u017cycia plik\u00f3w css, scss czy less. Biblioteka ta mo\u017ce zosta\u0107 znaleziona na stronie <a href=\"https:\/\/styled-components.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/styled-components.com\/.<\/a> Rozwi\u0105zanie pozwala nam r\u00f3wnie\u017c na stylowanie istniej\u0105cych ju\u017c komponent\u00f3w. Jedynym warunkiem, jaki musi spe\u0142ni\u0107 \u00f3w komponent, jest to, \u017ce powinien posiada\u0107 <strong>props className.<\/strong> Daje to nam bardzo du\u017c\u0105 elastyczno\u015b\u0107 w u\u017cyciu naszych element\u00f3w.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const Title = styled.h1`\n  font-size: 1.5em;\n  text-align: center;\n  color: palevioletred;\n`;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"biblioteka-redux-w-kontekscie-hookow\">Biblioteka Redux w kontek\u015bcie\u2026 hook\u00f3w<\/h2>\n\n\n\n<p>Doskona\u0142ym przyk\u0142adem u\u017cycia kontekstu, a w p\u00f3\u017aniejszych wersjach r\u00f3wnie\u017c hook\u00f3w, jest dobrze znana reactowcom biblioteka Redux. Realizuje ona zadanie przechowywania i propagowania danych w aplikacji b\u0105d\u017a w okre\u015blonym jej obszarze. Dlaczego \u0142\u0105czymy te koncepcje? Tak jak wcze\u015bniej wspomnia\u0142em, <strong>styled components pozwalaj\u0105 na napisanie w bardzo prosty spos\u00f3b styli w JavaScript dla element\u00f3w HTML,<\/strong> kt\u00f3re b\u0119d\u0105 odwzorowaniem tego, co mamy w szeroko znanych css-ach. Hook useContext natomiast umo\u017cliwiau dost\u0119pnienie danych ni\u017cszym komponentom w hierarchii.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"theming\">Theming<\/h2>\n\n\n\n<p>Pami\u0119tacie setki zmiennych w<strong> less<\/strong> lub <strong>scss,<\/strong> kt\u00f3re pisali\u015bmy dla utrzymania sp\u00f3jno\u015bci kolorystyki i wygl\u0105du element\u00f3w? Teraz to wszystko mo\u017cemy przenie\u015b\u0107 na poziom JavaScript. Jest to tak zwany <strong>theming.<\/strong> Dok\u0142adn\u0105 dokumentacj\u0119 opisanego tutaj po\u0142\u0105czenia znajdziecie na stronie <a href=\"https:\/\/styled-components.com\/docs\/advanced#theming\" target=\"_blank\" rel=\"noopener\">https:\/\/styled-components.com\/docs\/advanced#theming.<\/a><\/p>\n\n\n\n<p><strong>Theming to niesamowicie wygodne narz\u0119dzie, dzi\u0119ki kt\u00f3remu utrzymanie sp\u00f3jnego wygl\u0105du aplikacji b\u0119dzie du\u017co prostsze<\/strong>. Ponadto mo\u017cna dzi\u0119ki temu wyegzekwowa\u0107 u\u017cywanie przez programist\u00f3w sp\u00f3jnej nomenklatury dla wariant\u00f3w wygl\u0105du komponent\u00f3w.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"asm\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Define our button, but with the use of props.theme this time\nconst Button = styled.button`\n  font-size: 1em;\n  margin: 1em;\n  padding: 0.25em 1em;\n  border-radius: 3px;\n \n  \/* Color the border and text with theme.main *\/\n  color: ${props => props.theme.main};\n  border: 2px solid ${props => props.theme.main};\n`;\n \n\/\/ We are passing a default theme for Buttons that arent wrapped in the ThemeProvider\nButton.defaultProps = {\n  theme: {\n    main: \"palevioletred\"\n  }\n}\n \n\/\/ Define what props.theme will look like\nconst theme = {\n  main: \"mediumseagreen\"\n};\n \nrender(\n  &lt;div>\n    &lt;Button>Normal&lt;\/Button>\n \n    &lt;ThemeProvider theme={theme}>\n      &lt;Button>Themed&lt;\/Button>\n    &lt;\/ThemeProvider>\n  &lt;\/div>\n);\n<\/pre>\n\n\n\n<p><a href=\"https:\/\/material-ui.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/material-ui.com\/<\/a> stanowi doskona\u0142y przyk\u0142ad u\u017cycia naszego po\u0142\u0105czenia. Jest to biblioteka, kt\u00f3ra zawiera zbi\u00f3r szeroko znanych element\u00f3w na stronach internetowych i kt\u00f3ra zosta\u0142a napisana w React. Implementuje takie elementy jak: typografia, przyciski, accordiony itd. W niej r\u00f3wnie\u017c mo\u017cna znale\u017a\u0107 rozwini\u0119cie koncepcji themingu oraz realny przyk\u0142ad u\u017cycia.<\/p>\n\n\n\n<p><strong>Przeczytaj tak\u017ce: PWA &#8211;<a href=\"https:\/\/jcommerce.catdesignapp.com\/angular-zrobmy-swoja-progressive-web-application\" target=\"_blank\" rel=\"noopener\"> Progressive Web Applications<\/a><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"podsumowanie\">Podsumowanie<\/h2>\n\n\n\n<p>Podsumowuj\u0105c, funkcjonalno\u015bci, jakie zyskali\u015bmy wraz z hookami, to naprawd\u0119 bardzo dobre narz\u0119dzia, kt\u00f3re pozwalaj\u0105 napisa\u0107 aplikacj\u0119 frontendow\u0105 w \u0142atwy oraz konfigurowalny spos\u00f3b. W projektach, w kt\u00f3re by\u0142em \/ jestem zaanga\u017cowany, nieraz u\u017cywali\u015bmy koncepcji themingu i sprawdza si\u0119 ona doskonale. Spr\u00f3bujcie sami!<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jak pewnie wiecie, React od wersji 16.8 wprowadzi\u0142 do swojego code base\u2019u hooki. Pocz\u0105tkowo funkcjonalno\u015b\u0107 ta nie wydawa\u0142a si\u0119 by\u0107 tak rewolucyjna, jednak gdy ju\u017c zacznie si\u0119 z niej korzysta\u0107 oraz przepisywa\u0107 kod na funkcjonalny, nietrudno zauwa\u017cy\u0107, jak bardzo u\u0142atwiaj\u0105 one prac\u0119. Pojawienie si\u0119 hook\u00f3w prze\u0142o\u017cy\u0142o si\u0119 r\u00f3wnie\u017c na szereg funkcjonalno\u015bci, kt\u00f3re daj\u0105 nam rozwi\u0105zania znanych problem\u00f3w lub zagadnie\u0144.<\/p>\n","protected":false},"author":179,"featured_media":31807,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":8,"footnotes":""},"categories":[1,582],"tags":[570],"offering":[522],"class_list":["post-31806","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-javascript-pl","offering-tech-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/179"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=31806"}],"version-history":[{"count":5,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31806\/revisions"}],"predecessor-version":[{"id":33026,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31806\/revisions\/33026"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/31807"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=31806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=31806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=31806"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=31806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}