Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit fbb524a

Browse filesBrowse files
committed
docs: Translates the ´Section 2 - Getting started´
1 parent 33783d9 commit fbb524a
Copy full SHA for fbb524a

File tree

Expand file treeCollapse file tree

1 file changed

+119
-0
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+119
-0
lines changed

‎README.md

Copy file name to clipboardExpand all lines: README.md
+119Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,125 @@ Você também deveria verificar [a nova documentação do TypeScript para descri
207207

208208
<!--END-SECTION:setup-->
209209

210+
<!--START-SECTION:function-components-->
211+
210212
# Seção 2: Primeiros Passos
211213

212214
## Componente de Função
215+
216+
Podem ser escritos como funções normais que recebem `props` como argumento e retornam um elemento JSX.
217+
218+
```tsx
219+
type AppProps = { message: string }; /* também se pode usar uma interface */
220+
const App = ({ message }: AppProps) => <div>{message}</div>;
221+
```
222+
223+
<details>
224+
225+
<summary><b>Por que `React.FC` é desencorajado? E sobre `React.FunctionComponent` / `React.VoidFunctionComponent`?</b></summary>
226+
227+
Você pode ver isso em muitas bases de código React + TypeScript:
228+
229+
```tsx
230+
const App: React.FunctionComponent<{ message: string }> = ({ message }) => (
231+
<div>{message}</div>
232+
);
233+
```
234+
235+
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).
236+
237+
Algumas diferenças da versão de "função normal":
238+
239+
- `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).
240+
241+
- Fornece verificação de tipos e preenchimento automático para propriedades estáticas como `displayName`,` propTypes` e `defaultProps`.
242+
243+
- Observe que existem alguns problemas conhecidos usando `defaultProps` com` React.FunctionComponent`. Consulte [este problema para obter detalhes] (https://github.com/typescript-cheatsheets/react-typescript-cheatsheet/issues/87). Nós mantemos uma seção `defaultProps` separada para que você também possa consultar.
244+
245+
```tsx
246+
const Title: React.FunctionComponent<{ title: string }> = ({
247+
children,
248+
title,
249+
}) => <div title={title}>{children}</div>;
250+
```
251+
252+
<details>
253+
<summary>
254+
Usando `React.VoidFunctionComponent` ou` React.VFC` como alternativa
255+
</summary>
256+
257+
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`).
258+
259+
```ts
260+
type Props = { foo: string };
261+
262+
// OK agora mas futuramente causará erro
263+
const FunctionComponent: React.FunctionComponent<Props> = ({
264+
foo,
265+
children,
266+
}: Props) => {
267+
return (
268+
<div>
269+
{foo} {children}
270+
</div>
271+
); // OK
272+
};
273+
274+
// OK agora mas futuramente se tornará obsoleto
275+
const VoidFunctionComponent: React.VoidFunctionComponent<Props> = ({
276+
foo,
277+
children,
278+
}) => {
279+
return (
280+
<div>
281+
{foo}
282+
{children}
283+
</div>
284+
);
285+
};
286+
```
287+
288+
</details>
289+
- _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.
290+
291+
Na maioria dos casos, faz pouca diferença qual sintaxe é usada, mas você pode preferir a natureza mais explícita de `React.FunctionComponent`.
292+
293+
</details>
294+
295+
<details>
296+
<summary><b>Problemas menores</b></summary>
297+
298+
Esses padrões não são suportados:
299+
300+
** Renderização condicional **
301+
302+
```tsx
303+
const MyConditionalComponent = ({ shouldRender = false }) =>
304+
shouldRender ? <div /> : false; // tampouco faça isso em JS
305+
const el = <MyConditionalComponent />; // gera um erro
306+
```
307+
308+
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.
309+
310+
```tsx
311+
const MyArrayComponent = () => Array(5).fill(<div />);
312+
const el2 = <MyArrayComponent />; // gera um erro
313+
```
314+
315+
**Array.fill**
316+
317+
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:
318+
319+
```tsx
320+
const MyArrayComponent = () => (Array(5).fill(<div />) as any) as JSX.Element;
321+
```
322+
323+
[Veja o comentário de @ferdaber aqui] (https://github.com/typescript-cheatsheets/react-typescript-cheatsheet/issues/57).
324+
325+
</details>
326+
327+
<!--END-SECTION:function-components-->
328+
329+
<!--START-SECTION:hooks-->
330+
331+
## Hooks

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.