Este artigo é uma continuação da série Aprendendo ReactJS.
Para acessar primeiro o artigo, acesse: Aprendendo ReactJS: Introdução
Para acessar o anterior a este, acesse: Aprendendo ReactJS: Parte 2
Renderização condicional
A exibição de um componente funcional pode ser determinada baseado em suas propriedades. Por exemplo:
function Feature(props) { if (props.ativa == true) { return <h1>Esta funcionalidade está ativa.</h1> } else { return <h1>Esta funcionalidade está inativa.</h1> } }
A mesma lógica pode ser expressada utilizado um operador ternário.
function Feature(props){ return <h1>Está funcionalidade está {props.ativa? "ativa" : "inativa"}</h1> }
Bloqueando a renderização
A exibição de um componente funcional pode ser evitada de renderizar como no exemplo abaixo:
function Feature(props) { if (props.ativa!) { return null } else { return <h1>{props.mensagem}</h1> } }
Você também pode obter o mesmo resultado utilizando o operado &&:
function Feature(props){ return ( props.ativa && <h1>{props.mensagem}</h1> ) }
Com o operador && com um booleano e uma expressão, se o booleano for verdadeiro, ele executará a expressão. Caso ele seja falso, o JavaScript computa que falso e uma a expressão resultam sempre em falso e já sai do teste. Por isso ela não será renderizada.
Componentes de Classe
Além de poderem ser escritos como uma função, os componentes React podem também ser escritos usando as classes do ES6. Componentes de classe são diferentes dos components funcionais pois eles permitem ter métodos de ciclo de vida e estado. Eles também vem com duas propriedades instanciadas, this.state e this.props, que representam o estado e propriedades do componente.
Componentes React escritos usando classes ES6:
class BemVindo extends React.Component{ render(){ return <h1>Olá MundoJS!</h1> } }
O código acima é o equivalente do seguinte componente funcional:
function BemVindo(){ return <h1>Olá MundoJS!</h1> }
Ambos components React podem ser escritos com seus nomes dentro de uma tag HTML:
let elemento = < BemVindo/>
Render()
O método render de um componente é usado para descrever qual tipo de elemento React será reotornado pelo componente de classe. É o equivalente ao valor passado no return do componente funcional. Por exemplo, o componente abaixo renderizará <h1>
Olá MundoJS!</h1>
:
class BemVindo extends React.Component { render() { return <h1> Olá MundoJS!</h1> } } //renderizará <h1> Olá MundoJS!</h1> ReactDOM.render( < BemVindo />, document.getElementById("root") )
Adicionando propriedades aos componentes de classe.
As propriedades de um componente podem ser acessadas através do atributo this.props. Isso difere levemente dos componentes funcionais onde elas precisam ser passadas como uma variável.
class BemVindo extends React.Component{ render(){ return <h1>Mensagem: {this.props.mensagem}</h1> } }
Você pode fornecer as propriedades da mesma forma em ambos componentes.
<Welcome message="Olá MundoJS!"/>
Constructor(props)
O método contructor() é chamado antes do componente React ser montado e pode ser usado para configurar o estado inicial do componente. É importante chamar super(props) no começo do construtor pois senão o this.props poderá não funcionar corretamente. O primeiro argumento do construtor representará as propriedades sendo passadas para o componente.
class Counter extends React.Component{ constructor(props){ super(props) } render(){ return <div>Componente</div> } }
Adicionando um estado inicial para os components de classe
O estado inicial dos componentes de classe podem ser declarados dentro do método constructor(). O estado deste componenetes deve ser declarado como um objeto com atributos.
class Counter extends React.Component{ constructor(props){ super(props) this.valores= { foo:123, bar:456 } } render(){ return <div>foo:{this.valores.foo} bar:{this.valores.bar}</div> } }
Atualizando o estado
O método setState(updater,[callback]) é utilizado para atualizar o estado do componente. Ele recebe um objeto “atualizador” e atualiza o estado do componente através de uma mescla superficial do atributos dos dois objetos de estado (atual e novo). Como este metodo atualiza o estado de forma assinacrona, existe uma opção de chamar uma função de callback uma vez que a atualização terminou. Para poder usar o setState(), ele precisa ser referenciado através da chamada this.setState().
O método setState ativará a fase de atualização no ciclo de vida do componente, causanda a rerenderização a não ser que a função shouldComponentUpdate() retorne falso.
class Msg extends React.Component{ constructor(props){ super(props) //estado inicial this.state = {mensagem:"Mensagem Inicial"} } // Este método é chamado após todos os element filhos e instancias do components tenham carregado no Native UI. componentDidMount(){ //updating state this.setState({mensagem:"Nova Mensagem"}) } render(){ return <div>Mensagem:{this.state.mensagem}</div> } }
Por hoje seria isso. Assim que montar mais uma parte deste tutorial estarei liberando ele aqui no site do MundoJS.
Caso você encontre algum erro, tenha um contribuição ou dica, deixe seu comentário aqui em baixo que irei responder o mais breve possível.