React遍历state中的数据,列表渲染函数的封装

react不像vue一样有着各种各样的指令,来遍历,显示隐藏dom,
引入React这个库

import React from 'react

这里是全部的代码

import React from 'react'

export default class TestList extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            arr: [
                { id: 1, name: 'lisi-1' },
                { id: 2, name: 'lisi-2' },
                { id: 3, name: 'lisi-3' },
                { id: 4, name: 'lisi-4' }
            ]
        }
    }

    rowClick(ele) {
        console.log('行', ele.id)
    }
    rowChange(e) {
        console.log(e)
    }

    // 这种方式渲染,可以做复杂的业务运算
    createList1() {
        let { arr } = this.state
        let res = []
        arr.map((ele,index)=>{
            // 写语句,可以做复杂的计算
            ele.checked = !(index%2==0)

            res.push(
                <div key={ele.id} onClick={this.rowClick.bind(this, ele)}>
                    <input type='checkbox' checked={ele.checked} onChange={this.rowChange.bind(this)} />
                    <span>{index}</span>
                    <span>--</span>
                    <span>{ele.name}</span>
                </div>
            )
        })
        return res
    }

    // 这种写法,一般不用做复杂的运算,不用对数组进行处理
    createList2() {
        let { arr } = this.state
        return arr.map((ele,index)=>(
            <div key={ele.id} onClick={this.rowClick.bind(this, ele)}>
                <span>{index}</span>
                <span>--</span>
                <span>{ele.name}</span>
            </div>
        ))
    }

    
    render() {
        let { arr } = this.state
        return (
            <div>
                <h1>列表渲染</h1>

                {/* [<div key='1'>1</div>, <div key='2'>2</div>, <div key='3'>3</div>] */}

                { this.createList1() }
                <hr />

                { this.createList2() }
                <hr />

                {
                    arr.map((ele,index)=>(
                        <div key={ele.id} onClick={this.rowClick.bind(this, ele)}>
                            <span>{index}</span>
                            <span>--</span>
                            <span>{ele.name}</span>
                        </div>
                    ))
                }

            </div>
        )
    }
} 

采用类组件的写法
export default class TestList extends React.Component {}
通过constructor这个构造器和render这个渲染函数`

 constructor(props) {
        super(props)
        this.state = {
            arr: [
                { id: 1, name: 'lisi-1' },
                { id: 2, name: 'lisi-2' },
                { id: 3, name: 'lisi-3' },
                { id: 4, name: 'lisi-4' }
            ]
        }
    }

render函数


```render() {
        let { arr } = this.state
        return (
            <div>
                <h1>列表渲染</h1>

                {/* [<div key='1'>1</div>, <div key='2'>2</div>, <div key='3'>3</div>] */}

                { this.createList1() }
                <hr />

                { this.createList2() }
                <hr />

                {
                    arr.map((ele,index)=>(
                        <div key={ele.id} onClick={this.rowClick.bind(this, ele)}>
                            <span>{index}</span>
                            <span>--</span>
                            <span>{ele.name}</span>
                        </div>
                    ))
                }
                 </div>
        )
    }
}
封装列表渲染函数

> 写法一:
// 这种方式渲染,可以做复杂的业务运算
    createList1() {
        let { arr } = this.state
        let res = []
        arr.map((ele,index)=>{
            // 写语句,可以做复杂的计算
            ele.checked = !(index%2==0)

            res.push(
                <div key={ele.id} onClick={this.rowClick.bind(this, ele)}>
                    <input type='checkbox' checked={ele.checked} onChange={this.rowChange.bind(this)} />
                    <span>{index}</span>
                    <span>--</span>
                    <span>{ele.name}</span>
                </div>
            )
        })
        return res
    }

 写法二:
   // 这种写法,一般不用做复杂的运算,不用对数组进行处理
    createList2() {
        let { arr } = this.state
        return arr.map((ele,index)=>(
            <div key={ele.id} onClick={this.rowClick.bind(this, ele)}>
                <span>{index}</span>
                <span>--</span>
                <span>{ele.name}</span>
            </div>
        ))
    }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值