Jak stworzyć dynamiczny href w funkcji react render?

105

Renderuję listę postów. Dla każdego posta chciałbym wyrenderować tag kotwicy z identyfikatorem posta jako częścią ciągu 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>
    );

W jaki sposób mogę to zrobić tak, że każdy post ma href dnia /posts/1, /posts/2etc?

Connor Leech
źródło

Odpowiedzi:

192

Użyj konkatenacji ciągów:

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

Składnia JSX pozwala na użycie ciągów znaków lub wyrażeń ({...})jako wartości. Nie możesz mieszać obu. Wewnątrz wyrażenia możesz, jak sugeruje nazwa, użyć dowolnego wyrażenia JavaScript do obliczenia wartości.

Felix Kling
źródło
1
bardzo rozsądne. Dzięki!
Connor Leech
1
działa świetnie, ale jeśli używasz kompilatora takiego jak babel, łańcuchy szablonów są bardziej eleganckie.
HussienK
co jeśli to mailto?
tallgirltaadaa
@tallgirltaadaa: bez różnicy. JSX / JavaScript nie dba o rzeczywistą wartość ciągu.
Felix Kling
87

Możesz także użyć składni backtick ES6

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

Więcej informacji na temat literałów szablonów es6

Nath
źródło
aby to zadziałało, czy konieczne jest użycie `a nie '?
Joe Lloyd
3
Tak, lewy przycisk to nowa składnia es6 dla interpolacji ciągów, zaktualizowałem moją odpowiedź linkiem
Nath
2

Oprócz odpowiedzi Felixa,

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

działałby dobrze. To jest fajne, ponieważ wszystko jest w jednym ciągu.

talacker
źródło
0

Czy mógłbyś tego spróbować?

Utwórz inny element w poście, taki jak post.link, a następnie przypisz do niego link przed wysłaniem posta do funkcji renderowania.

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

Dlatego powyższa funkcja renderująca powinna być zamiast tego.

return <li key={post.id}><a href={post.link}>{post.title}</a></li>
Khachornchit Songsaen
źródło