React Top-Level API
These docs are old and won’t be updated. Go to react.dev for the new React docs.
These new documentation pages teach modern React:
React
é o ponto de entrada da biblioteca React. Se você carrega o React a partir de uma tag <script>
, estas APIs top-level estarão disponíveis no React
global. Se você usa ES6 com npm, você pode escrever import React from 'react'
. Se você usa ES5 com npm, você pode escrever var React = require('react')
.
Visão Geral
Componentes
Os componentes React permitem que você divida a UI em pedaços independentes e reutilizáveis para pensar em cada pedaço isoladamente. Os componentes em React podem ser definidos ao estender React.Component
ou React.PureComponent
.
Se você não utiliza classes do ES6, você pode usar o módulo create-react-class
. Veja Usando React sem ES6 para mais informações.
Os componentes em React também podem ser definidos como funções que podem ser envoltas:
Criando Elementos em React
Nós recomendamos utilizar o JSX para descrever como sua UI deve se parecer. Cada elemento JSX é somente uma maneira alternativa de utilizar o React.createElement()
. Em geral você não vai utilizar os métodos seguintes caso esteja usando JSX.
Veja Usando React sem JSX para mais informações.
Transformando Elementos
O React
provê várias APIs para manipulação de elementos:
Fragments
O React
também provê um componente para que você possa renderizar múltiplos elementos sem a necessidade de criar outro elemento que os envolva.
Refs
Suspense
O Suspense permite que componentes “esperem” por algo antes de renderizar. Atualmente, o Suspense suporta somente uma finalidade: carregar componentes dinamicamente com React.lazy
. Futuramente, ele prestará suporte para outras finalidades, como busca de dados.
Transitions
Transitions are a new concurrent feature introduced in React 18. They allow you to mark updates as transitions, which tells React that they can be interrupted and avoid going back to Suspense fallbacks for already visible content.
Hooks
Os Hooks são uma novidade no React 16.8. Eles permitem que você utilize o estado (state) e outras funcionalidades do React sem ter que escrever uma classe para isso. Os Hooks possuem uma seção dedicada na documentação e uma referência da API separada:
Referência
React.Component
This content is out of date.
Read the new React documentation for
Component
.
React.Component
é a classe base para componentes React quando eles são definidos usando classes ES6:
class Greeting extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
Consulte a referência da API para React.Component para ver uma lista de métodos e propriedades relacionadas à classe base React.Component
.
React.PureComponent
This content is out of date.
Read the new React documentation for
PureComponent
.
React.PureComponent
é similar a React.Component
. A diferença entre eles é que o React.Component
não implementa o shouldComponentUpdate()
, enquanto o React.PureComponent
a implementa com uma comparação superficial de props e state.
Se o método render()
do seu componente React renderiza o mesmo resultado dados os mesmos props e state, você pode usar React.PureComponent
para um aumento no desempenho em alguns casos.
Nota
O
shouldComponentUpdate()
doReact.PureComponent
apenas compara superficialmente os objetos. Se estes contiverem estruturas de dados complexas, podem produzir falsos negativos para diferenças mais profundas. Apenas estendaPureComponent
quando você espera ter propriedades e estados simples, ou useforceUpdate()
quando você souber que estruturas de dados profundas foram alteradas. Ou considere usar objetos imutáveis para facilitar comparações rápidas de dados aninhados.Além disso, o método
shouldComponentUpdate()
doReact.PureComponent
pula atualizações de prop para toda a subárvore do componente. Esteja certo de que todos seus componentes que descendem dele também são “puros”.
React.memo
This content is out of date.
Read the new React documentation for
memo
.
const MyComponent = React.memo(function MyComponent(props) {
/* renderize usando props */
});
O React.memo
é um higher order component.
Se seu componente renderiza o mesmo resultado dados os mesmos props, você pode envolver nele uma chamada para React.memo
para um aumento no desempenho em alguns casos, através da memoização do resultado. Isto significa que o React vai pular a renderização do componente e reutilizar o último resultado renderizado.
React.memo
verifica apenas as alterações de prop. Se o seu componente de função envolvido em React.memo
tiver um useState
, useReducer
ou useContext
Hook em sua implementação, ele ainda será renderizado quando o estado ou o contexto mudar.
Por padrão, ele irá comparar apenas superficialmente os objetos nos props. Se você quiser controle sob a comparação, você também pode prover uma função customizada de comparação como segundo argumento.
function MyComponent(props) {
/* renderize usando props */
}
function areEqual(prevProps, nextProps) {
/*
se prevProps e nextProps renderizam o mesmo resultado,
retorne true.
caso contrário, retorne false.
*/
}
export default React.memo(MyComponent, areEqual);
Este método existe somente como uma otimização de performance. Não conte com ele para “prevenir” uma renderização, pois isso pode levar a bugs.
Nota
Ao contrário do método
shouldComponentUpdate()
de class components, a funçãoareEqual
retornatrue
se os props são iguais efalse
se os props não são iguais. É o inverso deshouldComponentUpdate
.
createElement()
This content is out of date.
Read the new React documentation for
createElement
.
React.createElement(
type,
[props],
[...children]
)
Cria e retorna um novo elemento React do tipo determinado. O argumento type
pode ser uma string contendo a tag name (como, por exemplo, 'div'
ou 'span'
), um componente React (uma classe ou uma função), ou um React fragment.
Código escrito utilizando JSX será convertido para utilizar React.createElement()
. Você tipicamente não invocará React.createElement()
diretamente se você estiver usando JSX. Veja React sem JSX para aprender mais.
cloneElement()
This content is out of date.
Read the new React documentation for
cloneElement
.
React.cloneElement(
element,
[config],
[...children]
)
Clona e retorna um novo elemento React usando element
como ponto de partida. config
deve conter todos os novos adereços, key
ou ref
. O elemento resultante terá os props do elemento original, com os novos props mesclados superficialmente. Novos elementos filhos substituirão os existentes. key
e ref
do elemento original serão preservados se não houver key
e ref
presentes na config
.
React.cloneElement()
é quase equivalente a:
<element.type {...element.props} {...props}>{children}</element.type>
No entanto, ele também preserva ref
s. Isto significa que se você possui um elemento filho com um ref
nele, você não o roubará acidentalmente do seu antecessor. Você terá o mesmo ref
ligado ao seu novo elemento. A nova ref
ou key
irá substituir as antigas, se houver.
Esta API foi introduzida como uma reposição ao React.addons.cloneWithProps()
, que foi descontinuado.
createFactory()
This content is out of date.
Read the new React documentation for
createFactory
.
React.createFactory(type)
Retorna uma função que produz elementos React do tipo determinado. Assim como em React.createElement()
, o argumento type
pode ser uma string contendo o tag name (como, por exemplo, 'div'
ou 'span'
), um componente React (uma classe ou uma função), ou um React fragment.
Este helper é considerado legado, e nós encorajamos você a utilizar JSX ou React.createElement()
diretamente como alternativa.
Em geral você não invocará React.createFactory()
diretamente se estiver utilizando JSX. Veja React sem JSX para aprender mais.
isValidElement()
This content is out of date.
Read the new React documentation for
isValidElement
.
React.isValidElement(object)
Verifica se o objeto é um elemento React. Retorna true
ou false
.
React.Children
This content is out of date.
Read the new React documentation for
Children
.
React.Children
provê utilitários para lidar com a estrutura de dados opaca this.props.children
.
React.Children.map
React.Children.map(children, function[(thisArg)])
Invoca uma função em cada elemento filho imediato contido em children
com this
definido para thisArg
. Se children
for um array, a função será chamada para cada filho no array. Se children
for null
ou undefined
, este método retornará null
ou undefined
ao invés de um array.
Nota
Se
children
for umFragment
ele será tratado como um elemento filho único.
React.Children.forEach
React.Children.forEach(children, function[(thisArg)])
Igual a React.Children.map()
, mas não retorna um array.
React.Children.count
React.Children.count(children)
Retorna o número total de componentes em children
, igual ao número de vezes que o callback passado para map
ou forEach
seria invocado.
React.Children.only
React.Children.only(children)
Verifica que children
possui apenas um elemento filho (um elemento React) e o retorna. Caso contrário, este método lança um erro.
Nota
O
React.Children.only()
não aceita o valor retornado deReact.Children.map()
pois este é um array ao invés de um elemento React.
React.Children.toArray
React.Children.toArray(children)
Retorna a estrutura de dados opaca children
como um flat array com as chaves atribuídas a cada elemento filho. Útil se você deseja manipular coleções de elementos filhos em seus métodos de renderização, especialmente se você quiser reordenar ou repartir this.props.children
antes de repassá-los.
Nota
React.Children.toArray()
alterakey
s para preservar a semântica de arrays aninhados quando realizando o flatten de listas de elementos filho. Isto é,toArray
prefixa cadakey
no array retornado, de tal modo que okey
de cada elemento possui o escopo do array que o contém.
React.Fragment
This content is out of date.
Read the new React documentation for
Fragment
.
O componente React.Fragment
permite que você retorne múltiplos elementos num método render()
sem precisar criar um elemento DOM adicional:
render() {
return (
<React.Fragment>
Some text.
<h2>A heading</h2>
</React.Fragment>
);
}
Você também pode usar ele com a forma abreviada <></>
. Para mais informações, veja React v16.2.0: Suporte Melhorado para Fragments.
React.createRef
This content is out of date.
Read the new React documentation for
createRef
.
React.createRef
cria uma ref
que pode ser anexada a elementos React através do atributo ref
.
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.inputRef = React.createRef(); }
render() {
return <input type="text" ref={this.inputRef} />; }
componentDidMount() {
this.inputRef.current.focus(); }
}
React.forwardRef
This content is out of date.
Read the new React documentation for
forwardRef
.
React.forwardRef
cria um componente React que encaminha o atributo ref
que ele recebe para outro componente abaixo na árvore. Esta técnica não é muito comum, mas é particularmente útil nos dois cenários:
React.forwardRef
aceita uma função de renderização como argumento. React chamará esta função com props
e ref
como seus dois argumentos. Esta função deve retornar um React node.
const FancyButton = React.forwardRef((props, ref) => ( <button ref={ref} className="FancyButton"> {props.children}
</button>
));
// You can now get a ref directly to the DOM button:
const ref = React.createRef();
<FancyButton ref={ref}>Click me!</FancyButton>;
No exemplo acima, React passa o ref
dado para o elemento <FancyButton ref={ref}>
como o segundo argumento para a função de renderização dentro da chamada React.forwardRef
.
Como resultado, após React anexar o ref
, ref.current
irá apontar diretamente para a instância do elemento DOM <button>
Para mais informações, veja encaminhando refs.
React.lazy
This content is out of date.
Read the new React documentation for
lazy
.
React.lazy()
permite que você defina um componente que é carregado dinamicamente. Isto ajuda a reduzir o tamanho do bundle, retardando o carregamento de componentes que não são utilizados durante a renderização inicial.
Você pode aprender como utilizar isto em nossa documentação de code splitting. Você pode também querer ver este artigo explicando como utilizar mais detalhadamente.
// Este componente é carregado dinamicamente
const SomeComponent = React.lazy(() => import('./SomeComponent'));
Note que renderizar componentes lazy
requer que exista um componente <React.Suspense>
num nível mais alto da árvore de renderização. É assim que você especifica um indicador de carregamento.
React.Suspense
This content is out of date.
Read the new React documentation for
Suspense
.
React.Suspense
permite que você especifique o indicador de carregamento no caso de alguns componentes na árvore abaixo dele ainda não estarem prontos para renderizar. No futuro, planejamos permitir que Suspense
lide com mais cenários, como busca de dados. Você pode ler sobre isso em nosso roteiro.
Hoje, carregamento lento de componentes é o único caso de uso suportado por <React.Suspense>
:
// Este componente é carregado dinamicamente
const OtherComponent = React.lazy(() => import('./OtherComponent'));
function MyComponent() {
return (
// Mostra <Spinner> enquanto OtherComponent carrega
<React.Suspense fallback={<Spinner />}>
<div>
<OtherComponent />
</div>
</React.Suspense>
);
}
Isto está documentado em nosso guia para code splitting. Note que componentes lazy
podem estar em níveis profundos dentro da árvore de Suspense
— ele não precisa envolver cada um deles. A melhor prática é colocar <Suspense>
onde você quer ver um indicador de carregamento, mas utilizar lazy()
onde você quiser realizar code splitting.
Nota
Para o conteúdo que já é mostrado ao usuário, voltar para um indicador de carregamento pode ser desorientador. Às vezes, é melhor mostrar a IU “antiga” enquanto a nova IU está sendo preparada. Para fazer isso, você pode usar as novas APIs de transição
startTransition
euseTransition
para marcar atualizações como transições e evitar fallbacks inesperados.
React.Suspense
na renderização do lado do servidor
Durante a renderização do lado do servidor, os limites de suspensão permitem que você elimine seu aplicativo em partes menores por meio da suspensão. Quando um componente é suspenso, agendamos uma tarefa de baixa prioridade para renderizar o fallback do limite Suspense mais próximo. Se o componente for suspenso antes de liberarmos o fallback, enviaremos o conteúdo real e descartaremos o fallback.
React.Suspense
durante a hidratação
Os limites suspensos dependem de seus limites pais serem hidratados antes que possam se hidratar, mas eles podem se hidratar independentemente dos limites irmãos. Eventos em um limite antes de ser hidratado farão com que o limite seja hidratado com uma prioridade mais alta do que os limites vizinhos. Leia mais
React.startTransition
This content is out of date.
Read the new React documentation for
startTransition
.
React.startTransition(callback)
React.startTransition
permite marcar atualizações dentro do callback fornecido como transições. Este método é projetado para ser usado quando React.useTransition
não está disponível.
Nota:
Atualizações em uma transição dão lugar a atualizações mais urgentes, como cliques.
As atualizações em uma transição não mostrarão um fallback para conteúdo ressuspenso, permitindo que o usuário continue interagindo enquanto renderiza a atualização.
React.startTransition
não fornece um sinalizadorisPending
. Para acompanhar o status pendente de uma transição, consulteReact.useTransition
.