反応レンダリング関数で動的hrefを作成する方法は?


105

投稿のリストをレンダリングしています。各投稿について、href文字列の一部として投稿IDを含むアンカータグをレンダリングしたいと思います。

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/2などを?

回答:


192

文字列連結を使用します。

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

JSX構文では、文字列または式({...})を値として使用できます。両方を混在させることはできません。式の中では、名前が示すように、任意のJavaScript式を使用して値を計算できます。


1
非常に賢明です。ありがとう!
Connor Leech

1
うまく機能しますが、babelのようなコンパイラを使用している場合、テンプレート文字列はよりエレガントです。
HussienK 2016

mailtoの場合はどうなりますか?
tallgirltaadaa

@tallgirltaadaa:違いはありません。JSX / JavaScriptは文字列の実際の値を気にしません。
Felix Kling、

87

ES6バックティック構文も使用できます

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

ES6テンプレートリテラルの詳細


これを機能させるには、「ではなく」を使用する必要がありますか?
Joe Lloyd

3
はい、バックティックは文字列補間用の新しいes6構文です。私の回答をリンクで更新しました
Nath

2

フェリックスの答えに加えて、

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

うまくいくだろう。これはすべて1つの文字列に含まれているため便利です。


0

これを試して頂けますか?

post.linkなどのpost内に別のアイテムを作成し、そのアイテムにリンクを割り当ててから、投稿をrender関数に送信します。

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.