จะสร้าง href แบบไดนามิกในฟังก์ชัน render render ได้อย่างไร?


108

ฉันกำลังแสดงรายการโพสต์ สำหรับแต่ละโพสต์ฉันต้องการแสดงผลแท็กจุดยึดที่มีรหัสโพสต์เป็นส่วนหนึ่งของสตริง href

render: function(){
    return (
        <ul>
            {
                this.props.posts.map(function(post){
                    return <li key={post.id}><a href='/posts/'{post.id}>{post.title}</a></li>
                })
            }
        </ul>
    );

ฉันจะทำยังไงเพื่อให้แต่ละโพสต์มีของ href ของ/posts/1, /posts/2etc?

คำตอบ:


193

ใช้การต่อสายอักขระ:

href={'/posts/' + post.id}

ไวยากรณ์ JSX อนุญาตให้ใช้สตริงหรือนิพจน์({...})เป็นค่า คุณไม่สามารถผสมทั้งสองอย่างได้ ภายในนิพจน์คุณสามารถใช้นิพจน์ JavaScript ใดก็ได้ตามที่ชื่อแนะนำเพื่อคำนวณค่า


1
สมเหตุสมผลมาก ขอบคุณ!
Connor Leech

1
ใช้งานได้ดี แต่ถ้าคุณใช้คอมไพเลอร์เช่น babel สตริงเทมเพลตจะสวยงามกว่า
HussienK

เกิดอะไรขึ้นถ้าเป็น mailto?
tallgirltaadaa

@tallgirltaadaa: ไม่แตกต่าง JSX / JavaScript ไม่สนใจค่าจริงของสตริง
Felix Kling

87

คุณสามารถใช้ไวยากรณ์ backtick ES6 ได้เช่นกัน

<a href={`/customer/${item._id}`} >{item.get('firstName')} {item.get('lastName')}</a>

ข้อมูลเพิ่มเติมเกี่ยวกับตัวอักษรเทมเพลต es6


เพื่อให้ได้ผลจำเป็นต้องใช้ `` และไม่ '?
Joe Lloyd

3
ใช่ backtick เป็นไวยากรณ์ es6 ใหม่สำหรับการแก้ไขสตริงอัปเดตคำตอบของฉันพร้อมลิงก์
Nath

2

นอกจากคำตอบของเฟลิกซ์แล้ว

href={`/posts/${posts.id}`}

ก็จะทำงานได้ดีเช่นกัน นี่เป็นสิ่งที่ดีเพราะทั้งหมดอยู่ในสตริงเดียว


0

คุณช่วยลองดูได้ไหม

สร้างรายการอื่นในโพสต์เช่นpost.linkจากนั้นกำหนดลิงก์ก่อนส่งโพสต์ไปยังฟังก์ชันการแสดงผล

post.link = '/posts/+ id.toString();

ดังนั้นฟังก์ชันการเรนเดอร์ด้านบนควรตามมาแทน

return <li key={post.id}><a href={post.link}>{post.title}</a></li>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.