ReactJS - 组件

在本章中,我们将学习如何组合组件以使应用程序更易于维护.这种方法允许更新和更改您的组件,而不会影响页面的其余部分.

无状态示例

以下示例中的第一个组件是应用的.此组件是标题内容的所有者.我们将分别创建标题内容,并将其添加到我们的 App 组件中的JSX树中.只需要导出 App 组件.

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;

为了能够在页面上呈现此内容,我们需要将其导入 main.js 文件并调用 reactDOM.render()的.我们在设置环境时已经这样做了.

main.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';

ReactDOM.render(<App />, document.getElementById('app'));

以上代码将生成以下结果.

React Component Stateless

有状态示例

在此示例中,我们将设置所有者组件的状态( App ). Header 组件就像上一个示例一样添加,因为它不需要任何状态.我们正在创建 table tbody 元素,而不是内容标记,我们将为数据<中的每个对象动态插入 TableRow /b> array.

可以看出,我们使用的是EcmaScript 2015箭头语法(=>),它看起来比旧的JavaScript语法更清晰.这将帮助我们用更少的代码行创建元素.当我们需要创建包含大量项目的列表时,它特别有用.

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"
            }
         ]
      }
   }
   render() {
      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'));

注意 : 请注意,我们在map()函数中使用了 key = {i}.这将有助于React仅更新必要的元素,而不是在发生变化时重新呈现整个列表.对于大量动态创建的元素,这是一个巨大的性能提升.

React Component Statefull