Giter Club home page Giter Club logo

modelo-react-ages's Introduction

Indice

Estrutura

Configurações

Ambiente

Indicação do ambiente que o sistema está rodando, se é produção, homologação ou desenvolvimento.

A configuração é feita atraves da váriavel de ambiente NODE_ENV.

Constantes

Constantes que auxiliam na padronização do sistema. Servem para substituir valores por um nome que facilite sua identificação.

Rotas

Configurações de rotas do sistema, onde são cadastradas todas as páginas e as suas respectivas URLs, utilizando o componente <Route> do react-router-dom

Quando criada uma nova rota, usar o helper ViewWrapper():

  • Ao inves de realizar um import normal, criar uma constante para receber o valor da função ViewWrapper(), que recebe como parametro o caminho para o componente desejado (relativo a pasta /views).
// Path completo = ./views/HomePage/HomePage
const HomePage = ViewWrapper("HomePage/HomePage");

Rotas atuais:

  • / - HomePage - Tela inicial do sistema.
  • Demais Rotas - Teka de erro 404.

URLs

Responsável por definir as URLs do sistema com base no ambiente atual.

Contexto

Os contextos do React são utilizados como "estados globais" da aplicação, podendo serem acessados em qualquer componente sem que se precise passar os valores como props por vários niveis.

Cada Contexto possui 2 arquivos:

import React from "react";

const AppContext = React.createContext();

export default AppContext;
  • Componente que guardara no seu state o valor do contexto, encapsulando o Provider original:
import React, { Component } from "react";

// Import do contexto criado anteriormente
import AppContext from "./AppContext.js";

class AppProvider extends Component {

  // Construtor com o estado inicial do componente
  constructor(props) {
    super(props);
    this.state = {};
  }

  render() {
    return (
      {/* Renderização do Provider original criado pelo Contexto */}
      {/* definindo que o valor dele corresponde ao state do componente atual */}

      <AppContext.Provider value={this.state}>

        {/* Renderizando os componentes filhos dentro do Provider do contexto */}
        {/* Para que eles tenham acesso ao valor quando chamarem o Consumer */}
        {this.props.children}
      </AppContext.Provider>
    );
  }
}

export default AppProvider;

Depois desses arquivos criados, o componente <AppProvider> deve englobar a aplicação, como no arquivo App.js, linha 37.

IMPORTANTE: O componente que deve englobara aplicação é o criado com base no contexto (neste caso <AppProvider>) e não Provider do proprio contexto (neste caso <AppContext.Provider>)

Agora para acessar o valor em qualquer componente da aplicação, basta chamar o Consumer do contexto desejado:

import AppContext from "./Context/AppContext/AppContext";

// ...

render(){
  return (
    <AppContext.Consumer>
    {appValue => {
      return (
        <div>
          Valor do contexto atual: {appValue}
        </div>
      )
    }}
    </AppContext.Consumer>
  )
}

Helpers

ModelValidator()

Responsável por válidar os objetos criados de acordo com o schema informado.

Utiliza o modulo ajv.

ViewWrapper()

Responsável por receber o path de uma View e retornar o componente da tela referente, porém dentro de um componente Loadable do modulo react-loadable, que possui algumas vantagens:

  • Import dinâmico dos componentes;
  • Loader inserido automaticamente;
  • Injeção dos contexto de App e Login através das props.

Modelos

Objetos que serão utilizados para a representação de dados do sistema. Todos os modelos devem apresentar a seguinte estrutura:

Import obrigatorio para realizar as validações de schema da classe.

import ModelValidator from "./../lib/ModelValidator";

Schema do objeto que será iniciado com as propriedades da classe e seus tipos, conforme biblioteca de validação.

let schema = {
properties: {
  data: { type: "object" },
  error: { type: "object" },
  status: { type: "string" }
},
required: ["data", "error", "status"]
}

Declaração do objeto com suas propriedades (atributos) e com o construtor que realizara a validação.

class Objeto {
propriedade;
outraPropriedade;

// Construtor da classe, recebendo o objeto que deve ser inicializado.
  constructor(obj){
    // Método que valida o objeto de acordo com o schema
    //e inicializa uma nova instancia dele
    ModelValidator(obj, schema, this);
  }
}

Serviços

TODO

Views

Componentes que representam uma tela a ser renderizada para o usuário. Todas as páginas devem extender uma página default <Page>.

O componente <Page> possui os métodos:

  • isAuthenticated() - Retorna se o usuário está autenticado ou não.
  • setLoaded(bool) - Define se o loader deve ou não aparecer na tela.

Além disso possui também os métodos que devem ser sobreescritos em cada página:

  • authenticated() - Retorna JSX para ser renderizado caso o usuário esteja autenticado.
  • unauthenticated() - Retorna JSX para ser renderizado caso o usuário não esteja autenticado.

A menos que a página em questão altere esse comportamento, o componente <Page> renderiza na tela o seguinte:

render() {
  return (
    <React.Fragment>
      <Header />
      {this.props.isAuthenticated()
        ? this.authenticated()
        : this.unauthenticated()}
    </React.Fragment>
  );
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.