ReactJS组件 ReactJS JSX ReactJS状态 在本章中,我们将学习如何组合组件以使应用更易于维护。这种方法允许更新和更改组件,而不会影响页面的其他部分。 无状态示例 以下示例中的第一个组件是 App 。此组件是 标题 和 内容的 所有者。我们正在单独创建 Header 和 Content ,并将其添加到我们的 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')); 上面的代码将生成以下结果。 有状态的例子 在这个例子中,我们将设置所有者组件( App )的状态。由于 Header 组件不需要任何状态,因此只需添加 Header 组件即可。我们正在创建 table 和 tbody 元素,而不是content标签,我们将在其中为 数据 数组中的每个对象动态插入 TableRow 。 ** 可以看出,我们使用的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仅更新必要的元素,而不是在发生更改时重新呈现整个列表。对于大量动态创建的元素来说,这是一个巨大的性能提升。 ReactJS JSX ReactJS状态