Hoy, en la siguiente parte de la traducción del curso de capacitación React, comenzaremos a trabajar en el primer proyecto de capacitación y hablaremos sobre los conceptos básicos del estilo.

→ 
Parte 1: descripción general del curso, razones de la popularidad de React, ReactDOM y JSX→ 
Parte 2: componentes funcionales→ 
Parte 3: archivos de componentes, estructura del proyecto→ 
Parte 4: componentes principales y secundarios→ 
Parte 5: inicio del trabajo en una aplicación TODO, los fundamentos del estilo→ 
Parte 6: sobre algunas características del curso, JSX y JavaScript→ 
Parte 7: estilos en línea→ 
Parte 8: trabajo continuo en la aplicación TODO, familiaridad con las propiedades de los componentes→ 
Parte 9: propiedades del componente→ 
Parte 10: Taller sobre trabajo con propiedades de componentes y estilo→ 
Parte 11: generación de marcado dinámico y método de matrices de mapas→ 
Parte 12: taller, tercera etapa de trabajo en una aplicación TODO→ 
Parte 13: componentes basados en clases→ 
Parte 14: taller sobre componentes basados en la clase, estado de los componentes.→ 
Parte 15: talleres de componentes de salud→ 
Parte 16: la cuarta etapa de trabajo en una aplicación TODO, manejo de eventos→ 
Parte 17: quinta etapa de trabajo en una aplicación TODO, modificando el estado de los componentes→ 
Parte 18: la sexta etapa de trabajo en una aplicación TODO→ 
Parte 19: métodos del ciclo de vida de los componentes.Parte 20: la primera lección de representación condicional→ 
Parte 21: segunda lección y taller sobre representación condicional→ 
Parte 22: la séptima etapa de trabajo en una aplicación TODO, descargando datos de fuentes externas→ 
Parte 23: primera lección sobre trabajar con formularios→ 
Parte 24: Segunda lección de formularios→ 
Parte 25: Taller sobre trabajo con formularios→ 
Parte 26: arquitectura de la aplicación, patrón de contenedor / componente→ 
Parte 27: proyecto del cursoLección 11. Taller. TODO aplicación. Etapa número 1
→ 
OriginalEn esta lección, comenzaremos a trabajar en nuestro primer proyecto de capacitación: la aplicación TODO. Clases similares se enmarcarán como talleres ordinarios. Primero, se le asignará una tarea, para cuya implementación será necesario navegar en el material previamente estudiado, después de lo cual se presentará una solución.
Trabajaremos en esta aplicación durante bastante tiempo, por lo tanto, si usa 
create-react-app , se recomienda crear un proyecto separado para ella.
▍Trabajo
- Crea una nueva aplicación React.
- Muestre el componente <App />en la página utilizando el archivoindex.js.
- El componente <App />debería generar código para mostrar 3-4 banderas con algo de texto detrás de ellas. El texto puede formatearse usando etiquetas<p>o<span>. Lo que puede hacer debe parecerse a una lista de tareas en la que ya se han realizado algunas entradas.
▍Solución
El código para el archivo 
index.js :
 import React from 'react' import ReactDOM from 'react-dom' import App from './App' ReactDOM.render(   <App />,   document.getElementById('root') ) 
App.js archivo 
App.js :
 import React from "react" function App() {   return (       <div>           <input type="checkbox" />           <p>Placeholder text here</p>                     <input type="checkbox" />           <p>Placeholder text here</p>                     <input type="checkbox" />           <p>Placeholder text here</p>                     <input type="checkbox" />           <p>Placeholder text here</p>       </div>   ) } export default App 
Así es como se ve el proyecto estándar 
create-react-app en VSCode en esta etapa del trabajo.
Proyecto en VSCodeEsto es lo que nuestra aplicación ahora muestra en la página.
Apariencia de la aplicación en el navegadorHoy hemos dado el primer paso hacia una aplicación TODO. Pero lo que muestra esta aplicación en la pantalla no se ve tan agradable como lo que apareció en las páginas durante nuestros experimentos anteriores. Por lo tanto, en la próxima lección nos centraremos en diseñar los elementos.
Lección 12. Estilo en React usando clases de CSS
→ 
OriginalAhora trabajaremos en la aplicación que se creó como resultado del taller en la lección 10. Esto es lo que la aplicación mostró en la pantalla.
Página de aplicación en el navegadorNos gustaría diseñar los elementos de la página. React tiene muchos enfoques de estilo. Ahora estamos utilizando el enfoque con los principios de los cuales probablemente ya esté familiarizado. Consiste en aplicar clases CSS y reglas CSS asignadas a estas clases. Echemos un vistazo a la estructura de este proyecto y pensemos qué elementos deben asignarse a las clases que se utilizarán para diseñarlos.
Proyecto en VSCodeEl archivo 
index.js responsable de representar el componente de la 
App . El componente de 
App muestra un elemento 
<div> , que contiene otros tres componentes: 
Header , 
MainComponent y 
Footer . Y cada uno de estos componentes simplemente muestra un elemento JSX con texto. Es en estos componentes que participaremos en el diseño. Trabajemos en el componente 
Header . Recuerde que en esta etapa de su trabajo, su código se ve así:
 import React from "react" function Header() {   return (       <header>This is the header</header>   ) } export default Header 
Por lo general, cuando trabajan con código HTML y desean asignar una clase a un determinado elemento, esto se hace utilizando el atributo de 
class . Supongamos que vamos a asignar dicho atributo a un elemento 
<header> . Pero aquí no debemos olvidar que estamos trabajando no con código HTML, sino con JSX. Y aquí no podemos usar el atributo de 
class (de hecho, puede usar el atributo con este nombre, pero esto no es recomendable). En su lugar, 
className un atributo llamado 
className . Muchas publicaciones dicen que la razón de esto es porque la 
class es una palabra clave 
JavaScript reservada. Pero, de hecho, JSX usa la API JavaScript normal para trabajar con el DOM. Para acceder a elementos utilizando esta API, se utiliza un diseño familiar del siguiente formulario:
 document.getElementById("something") 
Para agregar una nueva clase a un elemento, proceda de la siguiente manera:
 document.getElementById("something").className += " new-class-name" 
En una situación similar, es más conveniente usar la propiedad de elementos 
classList , en particular, porque tiene métodos convenientes para agregar y eliminar clases, pero en este caso no importa. Y lo importante es que la propiedad 
className se usa 
className .
De hecho, para asignar clases a elementos JSX, es suficiente que sepamos que cuando la palabra clave de 
class se usa en HTML, la palabra clave 
className debe usarse en JSX.
Asigne la clase navbar al 
navbar <header> :
 import React from "react" function Header() {   return (       <header className="navbar">This is the header</header>   ) } export default Header 
Ahora, en la carpeta de 
components , cree el archivo 
Header.css . Pon el siguiente código en él:
 .navbar { background-color: purple; } 
Ahora conecte este archivo a 
Header.js con el comando de 
import "./Header.css" (con este comando, ampliando las capacidades del comando de 
import estándar, le decimos al paquete Webpack, que se usa en proyectos creados usando 
create-react-app , que queremos use 
Header.css en 
Header.js ).
Así es como se verá en VSCode.
Archivo de estilo y su conexión en VSCodeTodo esto conducirá al hecho de que cambia la apariencia de la línea superior que muestra la aplicación en la página.
Cambiar estilo de línea superiorAquí usamos un estilo extremadamente simple. 
Header.css contenido del archivo 
Header.css lo siguiente:
 .navbar {   height: 100px;   background-color: #333;   color: whitesmoke;   margin-bottom: 15px;   text-align: center;   font-size: 30px;   display: flex;   justify-content: center;   align-items: center; } 
Además, abra el archivo 
index.css ya existe en el proyecto y 
index.css el siguiente estilo:
 body {   margin: 0; } 
index.js este archivo en 
index.js con el comando de 
import "./index.css" . Como resultado, la página de la aplicación tomará la forma que se muestra en la siguiente figura.
Cambiar estilo de páginaTenga en cuenta que los estilos especificados en 
index.css han afectado a todos los elementos de la página. Si utiliza, por ejemplo, algún tipo de editor en línea para experimentación, el trabajo con archivos de estilo se puede organizar de una manera especial. Por ejemplo, en un editor de este tipo puede haber un único archivo de estilo estándar que se conecta automáticamente a la página, las reglas CSS descritas se aplicarán a todos los elementos de la página. En nuestro ejemplo simple, sería completamente posible poner todos los estilos en 
index.css .
En realidad, suponiendo que ya esté familiarizado con CSS, podemos decir que aquí usamos exactamente el mismo código CSS que se utiliza para diseñar elementos HTML comunes. Lo principal a tener en cuenta al diseñar elementos con clases en React es que, en lugar del atributo del elemento de 
class utilizado en HTML, 
className utiliza 
className .
Además, debe tenerse en cuenta que las clases solo se pueden asignar a elementos React, como 
<header> , 
<p> o 
<h1> . Si intenta asignar un nombre de clase a una instancia de componente, como 
<Header /> o 
<MainContent /> , el sistema se comportará de manera bastante diferente de lo que podría esperar. Hablaremos de esto más tarde. Mientras tanto, solo recuerde que las clases en las aplicaciones React se asignan a elementos, no a componentes.
Aquí hay algo más que puede resultarle difícil comenzar con React. Estamos hablando de elementos de estilo que tienen diferentes niveles de jerarquía en la página. Digamos que esto sucede cuando se usan las tecnologías CSS Flexbox o CSS Grid para el estilo. En tales casos, por ejemplo, cuando se usa el diseño Flex, debe saber qué entidad es el contenedor flexible y qué entidades son elementos flexibles. A saber, puede ser difícil de entender: cómo diseñar exactamente los elementos, a qué elementos aplicar ciertos estilos. Supongamos, por ejemplo, que el elemento 
<div> de nuestro componente de 
App debe ser un contenedor flexible:
 import React from "react" import Header from "./components/Header" import MainContent from "./components/MainContent" import Footer from "./components/Footer" function App() {   return (       <div>           <Header />           <MainContent />           <Footer />       </div>   ) } export default App 
En este caso, los elementos flexibles se muestran mediante los componentes 
Header , 
MainContent y 
Footer . Eche un vistazo, por ejemplo, al código del componente 
Header :
 import React from "react" import "./Header.css" function Header() {   return (       <header className="navbar">           This is the header       </header>   ) } export default Header 
El elemento 
<header> debe ser un descendiente directo del elemento 
<div> componente de la 
App . Debe estilizarse como un elemento flexible.
Para comprender la estilización de tales estructuras, debe considerar cuál será el código HTML generado por la aplicación. Abriremos la pestaña 
Elements de las herramientas de desarrollador de Chrome para la página que aparece en el navegador cuando trabaje con un proyecto creado usando la aplicación 
create-react-app .
Código de páginaEl elemento 
<div> con la 
root del identificador es el elemento de la página 
index.html que nos referimos en el método 
ReactDOM.render() llamado en el archivo 
index.js . El marcado generado por el componente de la 
App se muestra en él, es decir, el siguiente elemento 
<div> , que contiene los elementos 
<header> , 
<main> y 
<footer> formados por los componentes correspondientes.
Es decir, al analizar el código de la aplicación React proporcionada anteriormente, podemos suponer que la construcción 
<Header /> en el componente de la 
App se reemplaza con la 
<header className="navbar">This is the header</header> construcción 
<header className="navbar">This is the header</header> . Comprender este hecho le permite utilizar esquemas complejos para diseñar elementos de página.
Con esto concluye nuestra primera introducción al estilo de las aplicaciones React. Se recomienda que experimente con lo que acaba de descubrir. Por ejemplo, intente 
<MainContent /> elementos 
<MainContent /> por los 
<MainContent /> y 
<Footer /> <MainContent /> .
Resumen
Hoy comenzamos a desarrollar nuestro primer proyecto de capacitación: aplicaciones TODO, y también nos familiarizamos con el estilo de las aplicaciones React usando clases de CSS. La próxima vez hablaremos sobre las características de estilo de código a las que se adhiere el autor de este curso, así como algunas cosas sobre JSX y JavaScript.
Estimados lectores! ¿Ya tienes una idea para una aplicación que te gustaría crear usando React?
