Neste artigo, falaremos sobre arquivos de componentes e a estrutura dos projetos React.

→ 
Parte 1: visão geral do curso, razões para a popularidade do React, ReactDOM e JSX→ 
Parte 2: componentes funcionais→ 
Parte 3: arquivos de componentes, estrutura do projeto→ 
Parte 4: componentes pai e filho→ 
Parte 5: início do trabalho em um aplicativo TODO, noções básicas de estilo→ 
Parte 6: sobre alguns recursos do curso, JSX e JavaScript→ 
Parte 7: estilos embutidos→ 
Parte 8: trabalho contínuo na aplicação TODO, familiaridade com as propriedades dos componentes→ 
Parte 9: propriedades do componente→ 
Parte 10: Workshop sobre como trabalhar com propriedades e estilo de componentes→ 
Parte 11: geração dinâmica de marcação e método de matrizes de mapas→ 
Parte 12: workshop, terceira etapa do trabalho em uma aplicação TODO→ 
Parte 13: componentes baseados em classe→ 
Parte 14: workshop sobre componentes baseados em classe, status dos componentes→ 
Parte 15: workshops de componentes de saúde→ 
Parte 16: a quarta etapa do trabalho em um aplicativo TODO, manipulação de eventos→ 
Parte 17: quinta etapa do trabalho em um aplicativo TODO, modificando o estado dos componentes→ 
Parte 18: a sexta etapa do trabalho em um aplicativo TODO→ 
Parte 19: métodos do ciclo de vida dos componentesParte 20: a primeira lição sobre renderização condicional→ 
Parte 21: segunda lição e workshop sobre renderização condicional→ 
Parte 22: sétima etapa do trabalho em um aplicativo TODO, baixando dados de fontes externas→ 
Parte 23: primeira lição sobre como trabalhar com formulários→ 
Parte 24: Segunda lição sobre formulários→ 
Parte 25: Workshop sobre como trabalhar com formulários→ 
Parte 26: arquitetura do aplicativo, padrão Container / Component→ 
Parte 27: projeto do cursoLição 8. Arquivos de Componentes, Estrutura dos Projetos React
→ 
OriginalArquivos de componente
Se assumirmos que você executou a tarefa da lição prática anterior usando o projeto padrão criado pelo 
create-react-app , agora ele usa o arquivo 
index.html da pasta 
public , cujo conteúdo é adequado para nós, e o arquivo 
index.js da pasta 
src , em que escrevemos o código. Em particular, o 
index.js agora se parece com isso:
 import React from "react" import ReactDOM from "react-dom" function MyInfo() { return (   <div>     <h1>Bob Ziroll</h1>     <p>This is a paragraph about me...</p>     <ul>       <li>Thailand</li>       <li>Japan</li>       <li>Nordic Countries</li>     </ul>   </div> ) } ReactDOM.render( <MyInfo />, document.getElementById("root") ) 
Observe que o código do componente funcional 
MyInfo está contido neste arquivo. Como você se lembra, o React permite criar muitos componentes, esse é um dos seus pontos fortes. É claro que colocar o código de um grande número de componentes em um arquivo, embora tecnicamente viável, na prática, significa um grande inconveniente. Portanto, o código dos componentes, mesmo os pequenos, geralmente é organizado em arquivos separados. É essa abordagem que é recomendável seguir ao desenvolver aplicativos React.
Os arquivos de componentes recebem nomes correspondentes aos nomes dos componentes cujo código esses arquivos são armazenados. Coloque-os, no caso de 
create-react-app , na mesma pasta 
src que o arquivo 
index.js está 
index.js . Com essa abordagem, o arquivo com o componente 
MyInfo será nomeado 
MyInfo.js .
Crie um arquivo 
MyInfo.js e transfira o código do componente 
MyInfo para ele, removendo-o do 
index.js .
Nesta fase, o 
index.js ficará assim:
 import React from "react" import ReactDOM from "react-dom" ReactDOM.render( <MyInfo />, document.getElementById("root") ) 
MyInfo.js código 
MyInfo.js será assim:
 function MyInfo() {   return (     <div>       <h1>Bob Ziroll</h1>       <p>This is a paragraph about me...</p>       <ul>         <li>Thailand</li>         <li>Japan</li>         <li>Nordic Countries</li>       </ul>     </div>   ) } 
É assim que tudo parece no VSCode.
Transferir código do componente para um novo arquivoTransferimos o código do componente do 
index.js , mas a estrutura que temos agora ainda está inoperante.
Primeiro, lembre-se para que serve o comando 
import React from "react" no 
index.js , mesmo que não 
React diretamente aqui. A razão para isso é que, sem a importação 
React , os mecanismos desta biblioteca, em particular, o JSX, não funcionarão. Graças a esse comando de importação, nas classes anteriores, pudemos passar o código JSX para o método 
ReactDOM.render() e 
ReactDOM.render() a marcação HTML criada com base na página. Tudo isso significa que no arquivo 
MyInfo.js também precisamos importar o React. Essa é uma prática comum para arquivos de componentes.
Em segundo lugar, precisamos garantir que a função 
MyInfo.js arquivo 
MyInfo.js possa ser usada em outros arquivos de aplicativos. Ele precisa ser exportado para isso. Aqui, os recursos do padrão ES6 são usados. Como resultado, o código 
MyInfo.js atualizado assume o seguinte formato:
 import React from "react" function MyInfo() {   return (     <div>       <h1>Bob Ziroll</h1>       <p>This is a paragraph about me...</p>       <ul>         <li>Thailand</li>         <li>Japan</li>         <li>Nordic Countries</li>       </ul>     </div>   ) } export default MyInfo 
Agora vamos trabalhar no arquivo 
index.js . Ou seja, precisamos que o componente 
MyInfo esteja disponível neste arquivo. Você pode disponibilizá-lo no 
index.js importando-o.
E se eu tentar escrever um comando de importação de componente com base nos comandos de importação de 
react e 
react-dom no 
index.js ? Por exemplo, adicione o seguinte comando de importação ao arquivo:
 import MyInfo from "MyInfo.js"  
O sistema, tendo visto esse comando, em particular, contando com o fato de não conter informações sobre o caminho relativo ao arquivo, procurará a dependência do projeto - o módulo com o nome especificado quando esse comando foi chamado (veja como instalar dependências em projetos criados usando 
create-react-app ; essas dependências podem ser importadas para os projetos React da mesma maneira que a biblioteca React foi importada). Ela não encontrará esse módulo, como resultado, o comando import não funcionará. Portanto, o comando de importação de arquivo deve ser reescrito com o caminho para ele. Nesse caso, estamos satisfeitos com a indicação do diretório atual ( 
./ ) e o comando import terá o seguinte formato:
 import MyInfo from "./MyInfo.js"  
Além disso, se falarmos sobre o comando 
import , é importante considerar que isso implica que os arquivos JavaScript sejam importados com sua ajuda. Ou seja, a extensão 
.js pode ser completamente removida e o comando 
import , adquirido o formulário mostrado abaixo, não perderá sua funcionalidade.
 import MyInfo from "./MyInfo"  
Geralmente, esses comandos de importação de arquivo JS são gravados dessa maneira.
Aqui está o 
index.js completo do arquivo 
index.js .
 import React from "react" import ReactDOM from "react-dom" import MyInfo from "./MyInfo" ReactDOM.render( <MyInfo />, document.getElementById("root") ) 
▍ Estrutura do projeto
Com o crescimento em tamanho e complexidade dos projetos React, é muito importante manter sua estrutura em boas condições. No nosso caso, embora nosso projeto agora seja pequeno, é possível, na pasta 
src , criar a pasta 
components , projetada para armazenar arquivos com código de componente.
Crie uma pasta e mova o arquivo 
MyInfo.js para ela. Depois disso, você precisará editar o comando de importação deste arquivo em 
index.js .
Nomeadamente, agora o caminho para 
MyInfo.js indica que esse arquivo está localizado no mesmo local que 
index.js , mas, na verdade, esse arquivo está localizado na pasta de 
components localizada na mesma pasta que 
index.js . Como resultado, o caminho relativo para ele no 
index.js ficará assim: 
./components/MyInfo . Aqui está o código 
index.js atualizado:
 import React from "react" import ReactDOM from "react-dom" import MyInfo from "./components/MyInfo" ReactDOM.render( <MyInfo />, document.getElementById("root") ) 
E aqui está como tudo fica no VSCode.
Uma pasta para armazenar componentes e importar um componente desta pasta para o VSCodeDe fato, uma pasta de 
components , projetada para hospedar código para todos os componentes, é um exemplo de uma estrutura de projeto extremamente simplificada. Em projetos reais, para garantir a conveniência de trabalhar com um grande número de entidades, estruturas de pastas muito mais complexas são usadas. O que exatamente essas estruturas serão depende das necessidades do projeto e das preferências pessoais do programador.
É recomendável experimentar tudo o que você aprendeu hoje. Por exemplo, você pode tentar mover o arquivo 
MyInfo.js para alguma pasta e ver o que 
MyInfo.js ; pode renomeá-lo, alterando algum código nele. Quando, durante o curso de tais experiências, a operação correta do projeto for interrompida - será útil entender o problema e trazer o projeto de volta à condição de trabalho.
Sumário
Nesta lição, falamos sobre como formatar o código do componente como arquivos separados, exportar e importar o código usando o ES6 e a estrutura dos projetos React. Na próxima vez, continuaremos a nos familiarizar com os recursos dos componentes.
Caros leitores! Pedimos aos desenvolvedores experientes do React que compartilhem idéias com os novatos sobre a organização da estrutura do projeto.