The Wayback Machine - https://web.archive.org/web/20210311082323/https://github.com/typescript-cheatsheets/react-pt
Skip to content
main
Switch branches/tags
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 

README.md

React+TypeScript Cheatsheets em Português

react + ts logo

Cheatsheets para desenvolvedores com experiência em React que estão iniciando com TypeScript

Web docs | 中文翻译 | Español | Contribute! | Ask!


👋 Este repositório é mantido por @giseladifini e @swyx. Estamos muito felizes que você quer experimentar React com Typescript! Se você perceber algo de errado ou faltando, por favor abra uma issue! ðŸ‘?


Todas as dicas de React + TypeScript

  • Cheatsheet Básico (/README.md) é focado em ajudar desenvolvedores React a começar a usar TS com React apps
    • Foco nas melhores práticas com exemplos para copiar e colar.
    • Explica alguns tipos básicos de uso de TS e configuração ao longo do caminho.
    • Responde às perguntas mais frequentes.
    • Não cobre a lógica de tipo genérico em detalhes. Em vez disso, preferimos ensinar técnicas de solução de problemas simples para iniciantes.
    • O objetivo é se familiarizar com TS sem precisar aprender muito sobre TS.
  • Cheatsheet Avançado (/AVANÇADO.md) ajuda a mostrar e explicar o uso avançado de tipos genéricos para pessoas que escrevem utilitários/funções/props de renderização/componentes de ordem superior (HOCs) reutilizáveis ​​e bibliotecas TS+React.
    • Possui dicas e truques diversos para usuários profissionais.
    • Conselhos para contribuir com DefinitelyTyped.
    • O Objetivo é tirar total vantagem sobre o TypeScript.
  • Cheatsheet de migração (/MIGRANDO.md) ajuda a reunir conselhos para a migração incremental de grandes bases de código de JS ou Flow, de pessoas que já fizeram isso.
    • Nós não tentamos convencer as pessoas a mudar, apenas ajudar as pessoas que já decidiram isso.
    • âš ï¸? Esta é uma nova cheatsheet, toda ajuda é bem-vinda.
  • Cheatsheet de HOCs (/HOC.md) especificamente ensina as pessoas a escrever HOCs com a ajuda de exemplos.
    • Familiaridade com Genéricos é necessário.
    • âš ï¸? Esta é uma nova cheatsheet, toda a assistência é bem-vinda.

Tabela de conteúdos da Cheatsheet básica

Expandir Tabela de Conteúdo

Seção 1: Configuração

Pré-requisitos

  1. Uma boa compreensão de React.
  2. Familiaridade com os tipos básicos de TypeScript ( O guia de 2ality é de grande ajuda. Se você é completamente novato em TypeScript, dê uma olhada no tutorial de chibicode ).
  3. Ter lido a seção de TypeScript na documentação oficial do React.
  4. Ter lido a seção do React do novo playground de TypeScript ( Opcional: também acompanhar os mais de 40 exemplos na seção de exemplos do playground ).

Este guia sempre assumirá que você está usando a última versão de Typescript. Notas para versões mais antigas usarão a etiqueta <details>.

Ferramentas iniciais de React + TypeScript

Configurações na nuvem:

Configurações de desenvolvimento local:

  • Next.js: npx create-next-app -e with-typescript irá criar no seu diretório atual.
  • Create React App: npx create-react-app name-of-app --template typescript irá criar em um novo diretório.
  • Meteor: meteor create --typescript name-of-my-new-typescript-app
  • Ignite para React Native: ignite new myapp
  • TSDX: npx tsdx create mylib para Creating React+TS libraries
Outras ferramentas

Ferramentas menos maduras mas que vale a pena conferir:

  • Vite: npm init vite-app my-react-project --template react-ts (nota - ainda não está na versão v1.0, mas é muito rápida).
  • Snowpack: npx create-snowpack-app my-app --template app-template-react-typescript
  • Docusaurus v2 com suporte a TypeScript
  • Parcel
  • JP Morgan's modular: CRA + TS + Yarn Workspaces toolkit. yarn create modular-react-app <project-name>

Manual de configuração:

Import React

import * as React from 'react';
import * as ReactDOM from 'react-dom';

Este é o caminho mais seguro no futuro para importar React. Se você definir --allowSyntheticDefaultImports (ou adicionar "allowSyntheticDefaultImports": true) em seu tsconfig.json, você poderá importar como se faz normalmente em jsx:

import React from 'react';
import ReactDOM from 'react-dom';
Explicação

Por que usar allowSyntheticDefaultImports ao invés de esModuleInterop? Daniel Rosenwasser comentou que é melhor para webpack/parcel. Para consultar mais argumentos dessa discussão https://github.com/wmonk/create-react-app-typescript/issues/214

Você também deveria verificar a nova documentação do TypeScript para descrições oficiais entre cada flag do compilador!

Seção 2: Primeiros Passos

Componente de Função

Podem ser escritos como funções normais que recebem props como argumento e retornam um elemento JSX.

type AppProps = { message: string }; /* também se pode usar uma interface */
const App = ({ message }: AppProps) => <div>{message}</div>;
Por que `React.FC` é desencorajado? E sobre `React.FunctionComponent` / `React.VoidFunctionComponent`?

Você pode ver isso em muitas bases de código React + TypeScript:

const App: React.FunctionComponent<{ message: string }> = ({ message }) => (
  <div>{message}</div>
);

No entanto, o consenso geral hoje é que o uso de React.FunctionComponent (ou a abreviação React.FC) é [desencorajado] (https://github.com/facebook/create-react-app/pull/8177). Isto é um ponto de vista, é claro, mas se você concorda e deseja remover React.FC da sua base de código, você pode usar [este jscodeshift codemod] (https://github.com/gndelia/codemod-replace-react- fc-typescript).

Algumas diferenças da versão de "função normal":

  • React.FunctionComponent é explícito sobre o tipo de retorno, enquanto a versão normal da função é implícita (ou então precisa de anotações adicionais).

  • Fornece verificação de tipos e preenchimento automático para propriedades estáticas como displayName, propTypes e defaultProps.

  • Fornece uma definição implícita de children (veja abaixo) - no entanto, há alguns problemas com o tipo children implícito (por exemplo, DefinitelyTyped#33006), e é melhor ser explícito sobre os componentes que consomem children, de qualquer maneira.

const Title: React.FunctionComponent<{ title: string }> = ({
  children,
  title,
}) => <div title={title}>{children}</div>;
Usando `React.VoidFunctionComponent` ou` React.VFC` como alternativa

A partir da versão [@types/react 16.9.48] (https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46643), você também poderá usar o tipo React.VoidFunctionComponent ou React.VFC se quiser tipar children explicitamente. Esta é uma solução provisória até que FunctionComponent não aceite nenhum children por padrão (planejado para @types/react@^18.0.0).

type Props = { foo: string };

// OK agora mas futuramente causará erro
const FunctionComponent: React.FunctionComponent<Props> = ({
  foo,
  children,
}: Props) => {
  return (
    <div>
      {foo} {children}
    </div>
  ); // OK
};

// OK agora mas futuramente se tornará obsoleto
const VoidFunctionComponent: React.VoidFunctionComponent<Props> = ({
  foo,
  children,
}) => {
  return (
    <div>
      {foo}
      {children}
    </div>
  );
};
- _No futuro_, ele poderá marcar automaticamente os `props` como `readonly` (somente leitura), embora isso seja um ponto discutível se o objeto `props` for desestruturado na lista de parâmetros.

Na maioria dos casos, faz pouca diferença qual sintaxe é usada, mas você pode preferir a natureza mais explícita de React.FunctionComponent.

Problemas menores

Esses padrões não são suportados:

** Renderização condicional **

const MyConditionalComponent = ({ shouldRender = false }) =>
  shouldRender ? <div /> : false; // tampouco faça isso em JS
const el = <MyConditionalComponent />; // gera um erro

Isso ocorre porque, devido às limitações do compilador, os componentes de função não podem retornar nada além de uma expressão JSX ou null, caso contrário, ele reclama com uma mensagem de erro enigmática dizendo que outro tipo não pode ser atribuído ao Elemento.

const MyArrayComponent = () => Array(5).fill(<div />);
const el2 = <MyArrayComponent />; // gera um erro

Array.fill

Infelizmente, apenas anotar o tipo de função não vai ajudar, então se você realmente precisar retornar outros tipos exóticos que o React suporta, será necessário executar uma declaração de tipo:

const MyArrayComponent = () => (Array(5).fill(<div />) as any) as JSX.Element;

[Veja o comentário de @ferdaber aqui] (https://github.com/typescript-cheatsheets/react-typescript-cheatsheet/issues/57).

Hooks

About

React Typescript Cheatsheet in Portuguese 🇧🇷

Topics

Resources

License

Releases

No releases published

Packages

No packages published