当前位置: 当前位置:首页 > 焦点 > React基础-JSX语法列表渲染详解 正文

React基础-JSX语法列表渲染详解

2024-04-27 19:49:37 来源:口口声声网 作者:热点 点击:404次

React基础-JSX语法列表渲染详解

React列表渲染

真实开发中我们会从服务器请求到大量的语法数据,数据会以列表的列表形式存储:

比如歌曲、歌手、渲染详解排行榜列表的语法数据;

比如商品、购物车、列表评论列表的渲染详解数据;

比如好友消息、动态、语法联系人列表的列表数据;

在React中并没有像Vue模块语法中的v-for指令,而且需要我们通过JavaScript代码的渲染详解方式组织数据,转成JSX:

很多从Vue转型到React的语法小伙伴非常不习惯,认为Vue的列表方式更加的简洁明了;

但是React中的JSX正是因为和JavaScript无缝的衔接,让它可以更加的渲染详解灵活;

另外我经常会提到React是真正可以提高我们编写代码能力的一种方式;

如何展示列表呢?

在React中,展示列表最多的语法方式就是使用数组的map高阶函数;

class App extends React.Component {  constructor() {    super()    this.state = {      students: [        {name: "aaa", age: 18, score: 99, id: 101},        {name: "bbb", age: 19, score: 88, id: 102},        {name: "ccc", age: 17, score: 77, id: 103},        {name: "ddd", age: 17, score: 98, id: 104}      ]     }  }  render() {    const { students } = this.state    return (      
{ students.map(stu =>{ return(

学号: {stu.name}

年龄: {stu.age}

成绩: {stu.score}

) }) }
) }}const app = ReactDOM.createRoot(document.querySelector("#app"))app.render()

很多时候我们在展示一个数组中的数据之前,需要先对它进行一些处理:

比如过滤掉一些内容:filter函数; 例如上面代码中,列表 要求展示学生分数大于80的

class App extends React.Component {  constructor() {    super()    this.state = {      students: [        {name: "aaa", age: 18, score: 99, id: 101},        {name: "bbb", age: 19, score: 88, id: 102},        {name: "ccc", age: 17, score: 77, id: 103},        {name: "ddd", age: 17, score: 98, id: 104}      ]     }  }  render() {    const { students } = this.state    // 对数组过滤再遍历    const filterStudents = students.filter(item =>{      return item.score >80    })    return (      
{ filterStudents.map(stu =>{ return(

学号: {stu.name}

年龄: {stu.age}

成绩: {stu.score}

) }) }
) }}const app = ReactDOM.createRoot(document.querySelector("#app"))app.render()

比如截取数组中的一部分内容:slice函数, 例如上面代码中, 要求截取数组的前两条进行展示

class App extends React.Component {  constructor() {    super()    this.state = {      students: [        {name: "aaa", age: 18, score: 99, id: 101},        {name: "bbb", age: 19, score: 88, id: 102},        {name: "ccc", age: 17, score: 77, id: 103},        {name: "ddd", age: 17, score: 98, id: 104}      ]     }  }  render() {    const { students } = this.state        // 对数组截取再遍历    const spliceStudents = students.splice(0,2)    return (      
{ spliceStudents.map(stu =>{ return(

学号: {stu.name}

年龄: {stu.age}

成绩: {stu.score}

) }) }
) }}const app = ReactDOM.createRoot(document.querySelector("#app"))app.render()

上面的操作先过滤, 再截取, 最后进行遍历, 其实可以通过链式调用一行代码完成

class App extends React.Component {      constructor() {        super()        this.state = {          students: [            {name: "aaa", age: 18, score: 99, id: 101},            {name: "bbb", age: 19, score: 88, id: 102},            {name: "ccc", age: 17, score: 77, id: 103},            {name: "ccc", age: 17, score: 77, id: 103},            {name: "ddd", age: 17, score: 98, id: 104}          ]         }      }      render() {        const { students } = this.state        return (          
{/* 链式调用, 一步操作完成 */} { students.filter(item =>item.score >80).splice(0, 2).map(stu =>{ return(

学号: {stu.name}

年龄: {stu.age}

成绩: {stu.score}

) }) }
) } } const app = ReactDOM.createRoot(document.querySelector("#app")) app.render()

我们会发现在前面的代码中如果没有绑定key就会会报一个警告, 这个警告是告诉我们需要在列表展示的jsx中添加一个key

key主要的作用是为了提高diff算法时的效率;

作者:休闲
------分隔线----------------------------
头条新闻
图片新闻
新闻排行榜