在我们实际开发中,循环是必不可少的,尤其在表格中的数据显示,我们会把ajax的json数据显示在表格中。
1.一个最简单的例子
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import registerServiceWorker from './registerServiceWorker'; //设置组件 class Table extends React.Component { render() { var arr=[ <tr key="0"><td>1</td><td>n1</td></tr>,<tr key="1"><td>2</td><td>n2</td></tr>,<tr key="2"><td>3</td><td>n3</td></tr>,<tr key="3"><td>4</td><td>n4</td></tr> ]; return <table><tbody>{arr}</tbody></table> } } ReactDOM.render( <div> <Table /> </div>,document.getElementById('root') ); registerServiceWorker();
我们的table组件组把arr数组形式的xml显示在对应位置。
key不写会警告我们,我们给要循环的写一个key即可!
显示如下:
审查元素:
在我们的{}里面接收的是数组,react会自动循环处理这个数组,然后渲染好结构。
2.数组数据的循环处理
我们把arr的内容提出到一个数组中,不要xml,然后用数组的push方法插入到另一个数组,把这个数组放在{}中:
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import registerServiceWorker from './registerServiceWorker'; //设置组件 class Table extends React.Component { render() { var arr=[ 'n1','n2','n3','n4' ]; var newarr=[]; for(var i=0;i<arr.length;i++){ newarr.push(<tr key={i}><td>{arr[i]}</td></tr>) }; return <table><tbody>{newarr}</tbody></table> } } ReactDOM.render( <div> <Table /> </div>,document.getElementById('root') ); registerServiceWorker();
我们记住jsx语法就是js+xml,xml就是我们的结构。
3.模拟ajax的json数据循环处理
非常简单,我们在ajax设置数据即可,在render的return 直接获取数组形式的arr:
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import registerServiceWorker from './registerServiceWorker'; //设置组件 class Table extends React.Component { constructor(props) { super(props); // 设置 initial state this.state = { arr: [] }; } render() { var newarr=[]; for(var i=0;i<this.state.arr.length;i++){ newarr.push(<tr key={i}><td>{this.state.arr[i].id}</td><td>{this.state.arr[i].name}</td></tr>) }; return <table><tbody>{newarr}</tbody></table> } componentDidMount() { //ajax 模拟异步处理 var arr=[ {id:1,name:'n1'},{id:2,name:'n2'},{id:3,name:'n3'},{id:4,name:'n4'} ]; setTimeout(function(){ this.setState({arr:arr}) }.bind(this),500)//让this指向类 } } ReactDOM.render( <div> <Table /> </div>,document.getElementById('root') ); registerServiceWorker();
4.循环进阶,数组map函数
我们可能非常不喜欢这样的写法:
我们可以把循环加入到return的xml中,使用map:
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import registerServiceWorker from './registerServiceWorker'; //设置组件 class Table extends React.Component { render() { var arr=[ 'n1','n4' ]; return <table><tbody> { arr.map(function(val,i){ return <tr key={i}><td>{val}</td></tr> }) } </tbody></table> } } ReactDOM.render( <div> <Table /> </div>,document.getElementById('root') ); registerServiceWorker();