{"id":1663,"date":"2024-08-02T10:59:56","date_gmt":"2024-08-02T08:59:56","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=1663"},"modified":"2024-08-02T10:59:57","modified_gmt":"2024-08-02T08:59:57","slug":"005-primeros-componentes-de-ui","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/javascript\/javascript-practico\/18-single-page-application-spa\/005-primeros-componentes-de-ui\/","title":{"rendered":"005. Primeros Componentes de UI"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En este cap\u00edtulo vamos a crear <strong>componentes<\/strong>, veremos diferentes t\u00e9cnicas. Todas las t\u00e9cnicas que estuvimos viendo en los cap\u00edtulos del <strong>DOM<\/strong> (crear <strong>documentos<\/strong> y <strong>fragmentos<\/strong>, <strong>templates HTML<\/strong>, o incluso la t\u00e9cnica del <strong>InnerHTML<\/strong>). Para ello crearemos un componente que ser\u00e1 el <strong>t\u00edtulo<\/strong>. Crearemos una <strong>postcard<\/strong> donde iremos metiendo la informaci\u00f3n de los art\u00edculos de <strong>WordPress<\/strong> que estemos recibiendo del sitio que estamos consultando.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Para ello, dentro de la carpeta <em>components<\/em> crearemos un archivo denominado <em>Title.js<\/em>, que mostrar\u00e1 el t\u00edtulo de nuestra aplicaci\u00f3n. otro que se denomine <em>Loader.js<\/em>, que representar\u00e1 el <strong>cargador<\/strong>, de manera que cuando hagamos una petici\u00f3n, este va a ser el cargador que se mostrar\u00e1 hasta que se cargue el contenido, este desaparecer\u00e1 cuando se cargue el contenido, y otro componente denominado <em>PostCard.js<\/em>, que ser\u00e1 la tarjeta que nos traer\u00e1 toda la informaci\u00f3n de cada uno de los <strong>posts<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las sintaxis de cada uno de ellos ser\u00e1n las siguientes:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sintaxis del componente <em>Title.js<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import api from \"..\/helpers\/wp-api.js\";\n\nexport function Title() {\n&nbsp; const $h1 = document.createElement(\"h1\");\n&nbsp; $h1.innerHTML = `\n&nbsp; &nbsp; &lt;a href=\"${api.DOMAIN}\" target=\"_blank\" rel=\"noopener\"&gt;\n&nbsp; &nbsp; ${api.NAME.toUpperCase()}\n&nbsp; &nbsp; &lt;\/a&gt;\n&nbsp; &nbsp; `;\n\n&nbsp; return $h1;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sintaxis del componente <em>Loader.js<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">export function Loader() {\n&nbsp; const $loader = document.createElement(\"img\");\n&nbsp; $loader.src = \"app\/assets\/loader.svg\";\n&nbsp; $loader.alt = \"Cargando...\";\n&nbsp; $loader.classList.add(\"loader\");\n\n&nbsp; return $loader;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sintaxis nueva de <em>App.js<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import api from \".\/helpers\/wp-api.js\";\nimport { ajax } from \".\/helpers\/ajax.js\";\nimport { Title } from \".\/components\/Title.js\";\nimport { Loader} from \".\/components\/Loader.js\";\n\nexport function App() {\n&nbsp; const d = document,\n&nbsp; &nbsp; $root = d.getElementById(\"root\");\n\n&nbsp; $root.appendChild(Title());\n  $root.appendChild(Loader());\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n modificaremos la <strong>hoja de estilos<\/strong>, incluyendo m\u00e1s contenido a la misma. La sintaxis de <em>style.css<\/em> quedar\u00e1 de la siguiente manera.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/* Reseteo de estilos *\/\nhtml {\n&nbsp; box-sizing: border-box;\n&nbsp; font-family: sans-serif;\n&nbsp; font-size: 16px;\n}\n\n*,\n*::after,\n*::before {\n&nbsp; box-sizing: inherit;\n}\n\nbody {\n&nbsp; margin: 0;\n&nbsp; overflow-x: hidden;\n}\n\na {\n&nbsp; color: #01579b;\n&nbsp; transition: color 0.3s ease;\n}\n\na:hover {\n&nbsp; color: #00b00f;\n}\n\nh1 {\n&nbsp; text-align: center;\n}\n\nimg {\n&nbsp; max-width: 100%;\n&nbsp; height: auto;\n}\n\n.error {\n&nbsp; padding: 1rem;\n&nbsp; font-size: 150%;\n&nbsp; font-weight: bold;\n&nbsp; text-align: center;\n&nbsp; color: #fff;\n&nbsp; background-color: #dc3545;\n}\n\n.loader {\n&nbsp; margin: 1rem auto;\n&nbsp; display: block;\n&nbsp; width: 4rem;\n&nbsp; height: 4rem;\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Archivos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Estos son los archivos que hemos generado hasta ahora.<\/p>\n\n\n\n<div class=\"wp-block-file alignleft\"><a id=\"wp-block-file--media-f1d63a5e-b6f9-403e-8b68-08e68842486b\" href=\"https:\/\/blog.sutilweb.eu\/wp-content\/uploads\/2024\/08\/spa-2.zip\">spa-2<\/a><a href=\"https:\/\/blog.sutilweb.eu\/wp-content\/uploads\/2024\/08\/spa-2.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-f1d63a5e-b6f9-403e-8b68-08e68842486b\">Descarga<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>En este cap\u00edtulo vamos a crear componentes, veremos diferentes t\u00e9cnicas. Todas las t\u00e9cnicas que estuvimos viendo en los cap\u00edtulos del DOM (crear&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1646,"menu_order":4,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-1663","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"En este cap\u00edtulo vamos a crear componentes, veremos diferentes t\u00e9cnicas. Todas las t\u00e9cnicas que estuvimos viendo en los cap\u00edtulos del DOM (crear...","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1663"}],"version-history":[{"count":2,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1663\/revisions"}],"predecessor-version":[{"id":1666,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1663\/revisions\/1666"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1646"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}