Skip to main content

渲染数据

条件渲染

{
condition ? '渲染列表的代码' : '空空如也'
}

列表渲染

// 数据
const people = [
{
id: 1,
name: 'Leo',
age: 35
},
{
id: 2,
name: 'Xiao
}
]
// 渲染列表
{
people.map(person => {
return (
<dl key={person.id}>
<dt>{person.name}</dt>
<dd>age: {person.age}</dd>
</dl>
)
}
)
}

React 的高效依赖于所谓的 Virtual-DOM,尽量不碰 DOM。对于列表元素来说会有一个问题:元素可能 会在一个列表中改变位置。

要实现这个操作,只需要交换一下 DOM 位置就行了,但是 React 并不知道 其实我们只是改变了元素的位置,所以它会重新渲染后面两个元素(再执行 Virtual-DOM ),这样会大大增加 DOM 操作。

但如果给每个元素加上唯一的标识,React 就可以知道这两个元素只是交换了位置,这个标识就是 key ,这个 key 必须是每个元素唯一的标识

dangerouslySetInnerHTML

对于富文本创建的内容,后台拿到的数据是这样的:

content = "<p>React.js是一个构建UI的库</p>"

处于安全的原因,React 当中所有表达式的内容会被转义,如果直接输入,标签会被当成文本。这时候就需要使用 dangerouslySetHTML 属性,它允许我们动态设置 innerHTML

import React, { Component } from 'react'
import ReactDOM from 'react-dom'

class App extends Component {
constructor() {
super()
this.state = {
content : "<p>React.js是一个构建UI的库</p>"
}
}

render () {
return (
<div
// 注意这里是两个下下划线 __html
dangerouslySetInnerHTML={{__html: this.state.content}}
/>
)
}
}

ReactDOM.render(
<App/>,
document.getElementById('root')
)