React系列-条件渲染与列表渲染

admin 2025年2月15日09:09:34评论4 views字数 1728阅读5分45秒阅读模式

条件渲染

React没有像v-if、v-show这样的指令,需要使用JSX表达式组合而成
与运算 三目:

  • 判断表达式一定是false/null/undefined时才不会被渲染,0、空字符串、NaN则会显示

  • 如果render函数返回null,不会进行任何渲染

......
state = {
showLeft: false
// showLeft: undefined, // 与运算中效果同false
// showLeft: null, // 与运算中效果同false
// showLeft: 0 // 在与运算中会显示
// showLeft: Number(undefined) // 在与运算中会显示
}
......
{
!this.state.showLeft && <Right />
}

列表渲染

不建议使用index作为key值的情况:

  • 建立在列表顺序改变、元素增删的情况下:列表增删或顺序变了,index对应项就会改变
  • 若列表是静态不可操作的,可以选择index作为key值

用数据唯一的id作为key
动态生成一个静态id nanoid yarn add nanoid 每次render都会生成不同的id

import { nanoid } from 'nanoid'
class MyTable extends React.Component {
state = {
table: [
{
id: 0,
name: '渔'
},
{
id: 1,
name: '樵'
},
{
id: 2,
name: '耕'
},
{
id: 3,
name: '读'
},
]
}
render() {
return (
<div>
<table border="1">
<thead>
<tr>
<th>nanoid</th>
<th>ID</th>
<th>名字</th>
</tr>
</thead>
<tbody>
{
this.state.table.map(item => {
const key = nanoid()
return (
<tr key={key}>
<td>{key}</td>
<td>{item.id}</td>
<td>{item.name}</td>
</tr>
)
})
}
</tbody>
</table>
</div>

)
}
}
ReactDOM.render(
<MyTable />,
document.getElementById('app')
)

key赋值的正确姿势

  • 注意:React明确规定,key不能作为属性传递给子组件,必须显示传递key值(使用别的属性名,如sid)
  • 防止开发者在逻辑中对key值进行操作
import { nanoid } from 'nanoid'
class MyTitle extends React.Component {
render() {
return (
<thead>
<tr>
<th>nanoid</th>
<th>ID</th>
<th>名字</th>
</tr>
</thead>

)
}
}
class MyBody extends React.Component {
render() {
// 这里constructor super都省略了
const { sid, item } = this.props
return (
<tr key={sid}>
<td>{sid}</td>
<td>{item.id}</td>
<td>{item.name}</td>
</tr>

)
}
}
class MyTable extends React.Component {
state = {
table: [
{
id: 0,
name: '渔'
},
{
id: 1,
name: '樵'
},
{
id: 2,
name: '耕'
},
{
id: 3,
name: '读'
},
]
}
render() {
return (
<div>
<table border="1">
<MyTitle />
<tbody>
{
this.state.table.map(item => {
const key = nanoid()
return (
// 分别是传入的2个props 以及自身组件循环时的key
<MyBody sid={key} item={item} key={key} />
)
})
}
</tbody>
</table>
</div>

)
}
}
ReactDOM.render(
<MyTable />,
document.getElementById('app')
)

原文始发于微信公众号(迪哥讲事):React系列-条件渲染与列表渲染

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月15日09:09:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   React系列-条件渲染与列表渲染https://cn-sec.com/archives/1055266.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息