DROPS IV - Como organizo meus projetos em React

Não sei se é só eu, mas tenho problemas com React, mesmo me divertindo com e achando uma das ferramentas mais produtivas que vi em anos. Meu problema com o React é um pouco do ecossistema e o infinito de configurações ao invés de convenções (Ember ❤) e também aquele infinito de declarações de estrutura misturado com estilos e código que depois falam que não está misturando nada só tecnologia. (vou publicar meu artigo detalhadamente sobre, prometo)

Mas vamos ao que importa que é como organizei os arquivos e para mim fez sentido, pode ser até o recomendado e já usado no mercado, mas para aplicação de pessoal de React Native separei da seguinte forma:

Components

Acredito que ao trabalhar com uma arquitetura orientada a components essa separação é importante, junto dela deve existir algo para um shared-components, essa estrutura ajuda para components em comum de outras estruturas.

Estruturas principais de components serve para organizar um conjunto de telas e fica em uma estrutura principal no mesmo nível da shared-components. Por exemplos Authentication tem as telas de login e signup dentro dela.

Nessa estrutura principal deve exister um arquivo index.js que expõe os arquivos das pastas para a aplicação principal.

Screen-Components

Vou chamar dessa forma as estruturas que montam e agem para uma tela em si, vamos usar a já citada tela de Login que vc encontraria na seguinte caminho no terminal /App/components/authentication/login/.

Devem existir 3 arquivos um index.js, login.js e login.styles.js, cada arquivo representa uma função bem especifica, expor a classe, para evitar a declaração login/login, organizar estilos dessa tela e também conter a lógica do component.

O arquivo index.js seria algo assim:

// index.js
import { Login } from './login';
export default { Login };

Já o login.js ficaria assim:

import React from 'react'
import { Text, TextInput, View, Button } from 'react-native';

import { styles } from './login.style';

export default class Login extends React.Component {}

e o arquivo de login.styles.js:

import { StyleSheet } from 'react-native';
const styles = StyleSheet.create({});
export default { styles };

Isso ajuda a ter arquivos menores e com mais fácil manutenção, ainda estou pensando em algo para separar essa lógica da renderização, mas aí não seria React.


Me fale seus opiniões sobre o assunto lá no twitter. :)