How to React

An intro to react

Icaro Caldeira Carreira

  • Tech Lead @ RankMyApp

  • 9+ anos de experiência em desenvolvimento

  • Community manager @ Nerdzão

  • Community manager @ NodeBr

  • Speaker

Ferramentas

React

React é uma lib para criação de interface de usuários

React não é um framework

Baseado em componentes

O react funciona como a view em um modelo MVC

JSX

Não é nem HTML, nem string

É uma extensão de sintaxe do javascript

Lembra linguagens de template, porém possui o poder do javascript

JSX produz "elementos" de React

Por que utilizar JSX?

Escrita simplificada para criação de elementos

Isola os seus elementos

Previne injection, fazendo escape dos valores exibidos

Sintaxe

Componente sem JSX

class Hello extends React.Component {
  render() {
    return <div>Hello {this.props.toWhat}</div>;
  }
}

ReactDOM.render(
  <Hello toWhat="World" />,
  document.getElementById('root')
);

Componente com JSX

class Hello extends React.Component {
  render() {
    return React.createElement('div', null, `Hello ${this.props.toWhat}`);
  }
}

ReactDOM.render(
  React.createElement(Hello, {toWhat: 'World'}, null),
  document.getElementById('root')
);

Elementos

Elementos descrevem o que você vê na tela

function tick() {
  const element = (
    <div>
      <h1>Hello, world!</h1>
      <h2>It is {new Date().toLocaleTimeString()}.</h2>
    </div>
  );
  ReactDOM.render(element, document.getElementById('root'));
}

setInterval(tick, 1000);

São imutáveis

São atualizadas somente as partes necessárias e não todo o elemento

Componentes

São como peças de "lego" que juntas formam a sua aplicação

São como funções do javascript que retornam elementos

São independentes e reutilizáveis

Tipos de componentes

Função

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

Classe (ES6)

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

Props

São atributos recebidos pelo componente

São read-only

Todos os componentes devem funcionar como funções puras, respeitando (sem modificar) os props

Como funcionam as props?

class HelloMessage extends React.Component {
  render(props) {
    // neste caso, podemos utilizar o this.props
    // ou somente props

    return (
      <div>
        Hello {this.props.name}
      </div>
    );
  }
}

ReactDOM.render(
  <HelloMessage name="Taylor" />,
  document.getElementById('hello-example')
);

Ao utilizar um componente, passe a propriedades que deseja como atributos e, dentro do componente, utilize-as através do this.props ou props (capturado do render)

Ciclo de vida dos componentes

Ciclo de vida dos componentes

State

É o estado do componente

Os componentes podem ter ou não um estado, sendo chamados de containers e stateless respectivamente

É responsável pelo update do componente

Quando o componente tem o estado alterado ele é renderizado novamente

Como utilizar o state?

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {
    this.setState({
      date: new Date()
    });
  }
  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

ReactDOM.render(
  <Clock />,
  document.getElementById('root')
);

As 3 regras do state

Utilizar o .setState para atualização de estado

As atualizações de estado são assincronas

O estado é sempre fundido com estado atual

Hooks

 

useState

useReducer

useEffect

useContext

 

 

 

Hooks

useReducer
useCallback
useMemo
useRef
useImperativeHandle
useLayoutEffect
useDebugValue

Regras

Chamar um hook somente no top level (não dentro de loops, condições ou funções aninhadas)

 

Chamar um hook somente em componentes funcionais

Demo

Referências

Duvidas?

@icarcal

OBRIGADO

How to React - An intro to react

By Icaro Caldeira

How to React - An intro to react

  • 557