English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Componentes ReactJS (Components)

Neste capítulo, vamos aprender como combinar componentes para tornar a manutenção da aplicação mais fácil. Este método permite atualizar e alterar componentes sem afetar o resto da página.

无状态组件的实例

No exemplo a seguir, o primeiro componente é App. Este componente é o dono de Header e Content. Estamos criando Header e Content separadamente e adicionando-os à árvore JSX do nosso componente App. Apenas o componente App precisa ser exportado.

App.jsx

import React from 'react';
class App extends React.Component {   render() {
      return (
         <div>
            <Header/>
            <Content/>
         </div>
      );
   }
}
class Header extends React.Component {   render() {
      return (
         <div>
            <h1>Header</h1>
         </div>
      );
   }
}
class Content extends React.Component {   render() {
      return (
         <div>
            <h2>Content</h2>
            <p>The content text!!!</p>
         </div>
      );
   }
}
export default App;

Para que possamos apresentá-lo na página, precisamos importá-lo no arquivo main.js e chamar reactDOM.render(). Isso já foi feito ao configurar o ambiente.

main.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
ReactDOM.render(<App /, document.getElementById('app'));

O código acima gerará o seguinte resultado.

有状态组件的实例

在这个实例中,我们将设置所有者组件(App)的状态。Header O componente é adicionado da mesma forma que no exemplo anterior, pois não requer nenhum estado. Vamos criar elementos table e tbody, em vez de content marcadores, onde inseriremos dinamicamente um TableRow para cada objeto no array de dados.

Pode ser observado que usamos EcmaScript 2015A sintaxe de seta (=>) parece muito mais limpa do que a sintaxe antiga do JavaScript. Isso nos ajudará a criar elementos com menos linhas de código. É especialmente útil quando precisamos criar listas com muitos itens.

App.jsx

import React from 'react';
class App extends React.Component {   constructor() {      super();
      this.state = {
         data: 
         [
            {
               "id":1,
               "name":"Foo",
               "age":""}20"
            },
            {
               "id":2,
               "name":"Bar",
               "age":""}30"
            },
            {
               "id":3,
               "name":"Baz",
               "age":""}40"
            }
         ]
      }
   }
      return (
         <div>
            <Header/>
            <table>
               <tbody>
                  {this.state.data.map((person, i) => <TableRow key = {i} 
                     data = {person} />)}
               </tbody>
            </table>
         </div>
      );
   }
}
class Header extends React.Component {   render() {
      return (
         <div>
            <h1>Header</h1>
         </div>
      );
   }
}
class TableRow extends React.Component {   render() {
      return (
         <tr>
            <td>{this.props.data.id}</td>
            <td>{this.props.data.name}</td>
            <td>{this.props.data.age}</td>
         </tr>
      );
   }
}
export default App;

main.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
ReactDOM.render(<App/, document.getElementById('app'));

Atenção, usamos key = { i } dentro da função map(). Isso ajudará o React a atualizar apenas os elementos necessários, em vez de re-renderizar toda a lista ao发生变化. Isso representa uma melhoria significativa no desempenho para uma grande quantidade de elementos dinamicamente criados.