Skip to content

如何进行动态绑定

JSX 允许你在 JavaScript 中编写类似 HTML 的标签,这些标签都是静态的,当你需要动态的渲染数据或者动态的给标签添加属性时,则需要用到表达式。

可以在 JSX 的大括号 {} 内编写 JavaScript 表达式。

以双引号的静态绑定

目前标签中的属性都是通过双引号 "" 进行绑定的。

jsx
export default function Avatar() {
    return (
        <img
            className="avatar"
            src="https://i.imgur.com/7vQD0fPs.jpg"
            alt="Gregorio Y. Zara"
        />
    )
}

以变量形式的动态绑定

如果标签的属性值想要动态绑定,则需要使用大括号 {} 来包裹属性值。

注意

当使用大括号 {} 时,不能使用双引号 "" 来包裹。例如 src="{avatar}"

jsx
export default function Avatar() {
    const avatar = 'https://i.imgur.com/7vQD0fPs.jpg'
    const description = 'Gregorio Y. Zara'

    return <img className="avatar" src={avatar} alt={description} />
}

也支持模板语法渲染

jsx
export default function Avatar() {
    const title = 'Hello'

    return <div>{title} World</div>
}

以函数形式的动态绑定

除了变量形式以外,JSX 也支持以函数的形式进行动态绑定。例如绑定登录提交事件。

jsx
export default function Login() {
    const submit = () => {
        console.log('login')
    }

    return (
        <>
            <h1>登录模块</h1>
            <button onClick={submit}>登录</button>
        </>
    )
}

例如通过函数给数据进行处理。

jsx
const today = new Date()

function formatDate(date) {
    return new Intl.DateTimeFormat('zh-CN', { weekday: 'long' }).format(date)
}

export default function TodoList() {
    return <h1>To Do List for {formatDate(today)}</h1>
}

以对象形式的动态绑定

当需要绑定一个对象时,需要使用两层大括号 {{}}

注意

但是需要注意内联 style 属性,需要使用驼峰命名法编写。

html
<!-- 错误 -->
<ul style="background-color: black"></ul>

<!-- 正确 -->
<ul style={{ backgroundColor: 'black' }}></ul>
jsx
export default function TodoList() {
    return (
        <ul style={{ backgroundColor: 'black', color: 'pink' }}>
            <li>Improve the videophone</li>
            <li>Prepare aeronautics lectures</li>
            <li>Work on the alcohol-fuelled engine</li>
        </ul>
    )
}