React 列表渲染

简介: React 列表渲染

数组渲染



import React from 'react'
import ReactDom from 'react-dom'
class Welcome extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            list: [{
                title: '第一节课 React事件',
                content: '事件内容'
            }, {
                title: '第二节课 React数据传递',
                content: '数据传递'
            }, {
                title: '第三节课 条件渲染',
                content: '条件渲染内容'
            }]
        }
    }
    render() {
        let listArr = []
        for(let i = 0; i < this.state.list.length; i++) {
            let item = (
                <li>
                    <h3>{ this.state.list[i].title }</h3>
                    <p>{ this.state.list[i].content }</p>
                </li>
            )
            listArr.push(item)
            // 或者map方法
            let listArr = this.state.list.map((item, key) => {
                return (
                    <li key={ key }>
                        <h3>{ key + 1 + ' - ' + item['title'] }</h3>
                        <p>{ item['content'] }</p>
                    </li>
                )
            })
        }
        return (
            <div>
                <h1>今天课程内容</h1>
                <ul>
                    { listArr }
                </ul>
            </div>
        )
    }
}
ReactDom.render(<Welcome />, document.getElementById('root'))
复制代码


组件式循环


import React from 'react'
import ReactDom from 'react-dom'
function ListItem(props) {
    return (
        <li>
            <h3>{ props.index + 1 + ' - ' + props.data['title'] }</h3>
            <p>{ props.data['content'] }</p>
        </li>
    )
}
class Welcome extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            list: [{
                title: '第一节课 React事件',
                content: '事件内容'
            }, {
                title: '第二节课 React数据传递',
                content: '数据传递'
            }, {
                title: '第三节课 条件渲染',
                content: '条件渲染内容'
            }]
        }
    }
    render() {
        let listArr = this.state.list.map((item, key) => {
            return (
                <ListItem data={ item } key={ key } index={ key }></ListItem>
            )
        })
        return (
            <div>
                <h1>今天课程内容</h1>
                <ul>
                    { listArr }
                </ul>
            </div>
        )
    }
}
ReactDom.render(<Welcome />, document.getElementById('root'))
复制代码


循环汇总


import React from 'react'
import ReactDom from 'react-dom'
function ListItem(props) {
    return (
        <li>
            <h3>{ props.index + 1 + ' - ' + props.data['title'] }</h3>
            <p>{ props.data['content'] }</p>
        </li>
    )
}
class ListItem2 extends React.Component {
    constructor(props) {
        super(props)
        this.state = {}
    }
    render() {
        return (
            <li onClick={ (e) => { this.onOpenShowMsg(this.props.index, this.props.data) }}>
                <h3>{ this.props.index + 1 + ' - ' + this.props.data['title'] }</h3>
                <p>{ this.props.data['content'] }</p>
            </li>
        )
    }
    onOpenShowMsg = (index, data) => {
        console.log(index + ' - ' + data.title)
    }
}
class Welcome extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            list: [{
                title: '第一节课 React事件',
                content: '事件内容'
            }, {
                title: '第二节课 React数据传递',
                content: '数据传递'
            }, {
                title: '第三节课 条件渲染',
                content: '条件渲染内容'
            }]
        }
    }
    render() {
        let listArr = this.state.list.map((item, key) => {
            return (
                <ListItem data={ item } key={ key } index={ key }></ListItem>
            )
        })
        return (
            <div>
                <h1>今天课程内容</h1>
                <ul>
                    { listArr }
                </ul>
                <h1>第二个循环</h1>
                <ul>
                    {
                        this.state.list.map((item, key) => {
                            return (
                                <div>
                                    <ListItem2 data={ item } key={ key } index={ key }></ListItem2>
                                </div>
                            )
                        })
                    }
                </ul>
            </div>
        )
    }
}
ReactDom.render(<Welcome />, document.getElementById('root'))


相关文章
|
28天前
|
前端开发 JavaScript
React学习之——条件渲染
【10月更文挑战第16天】React 中没有像Vue中v-if这种指令。React 中的条件渲染和 JavaScript 中的一样,使用 JavaScript 运算符 if 或者条件运算符去创建元素来表现当前的状态,然后让 React 根据它们来更新 UI。
|
1月前
|
前端开发 JavaScript 容器
React 元素渲染
10月更文挑战第7天
25 1
|
1月前
|
监控 前端开发 UED
在 React 18 中利用并发渲染提高应用性能
【10月更文挑战第12天】利用并发渲染需要综合考虑应用的特点和需求,合理运用相关特性和策略,不断进行优化和调整,以达到最佳的性能提升效果。同时,要密切关注 React 的发展和更新,以便及时利用新的技术和方法来进一步优化应用性能。你还可以结合具体的项目实践来深入理解和掌握这些方法,让应用在 React 18 的并发渲染机制下发挥出更好的性能优势。
104 59
|
25天前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
|
1月前
|
前端开发 JavaScript 算法
React 渲染优化策略
【10月更文挑战第6天】React 是一个高效的 JavaScript 库,用于构建用户界面。本文从基础概念出发,深入探讨了 React 渲染优化的常见问题及解决方法,包括不必要的渲染、大量子组件的渲染、高频事件处理和大量列表渲染等问题,并提供了代码示例,帮助开发者提升应用性能。
51 6
|
1月前
|
前端开发 JavaScript API
React 列表 & Keys
10月更文挑战第9天
14 0
|
1月前
|
前端开发 JavaScript
React 条件渲染
10月更文挑战第9天
29 0
|
1月前
|
JavaScript 前端开发 算法
写 React / Vue 项目时为什么要在列表组件中写 key
在React或Vue项目中,为列表组件中的每个元素添加唯一的key属性,有助于框架高效地更新和渲染列表。Key帮助虚拟DOM识别哪些项已更改、添加或删除,从而优化性能并减少不必要的重新渲染。
|
3月前
|
资源调度 前端开发 API
React Suspense与Concurrent Mode:异步渲染的未来
React的Suspense与Concurrent Mode是16.8版后引入的功能,旨在改善用户体验与性能。Suspense组件作为异步边界,允许子组件在数据加载完成前显示占位符,结合React.lazy实现懒加载,优化资源调度。Concurrent Mode则通过并发渲染与智能调度提升应用响应性,支持时间分片和优先级调度,确保即使处理复杂任务时UI仍流畅。二者结合使用,能显著提高应用效率与交互体验,尤其适用于数据驱动的应用场景。
72 20
|
3月前
|
前端开发
React 如何使用条件渲染
【8月更文挑战第17天】React 如何使用条件渲染
43 3