Mam jeden składnik, który będzie wyświetlać tablicę ciągów. Kod wygląda następująco.
React.createClass({
render() {
<div>
this.props.data.map(t => <span>t</span>)
</div>
}
})
Działa doskonale. tj. jeśli props.data = ['tom', 'jason', 'chris'] Wyrenderowany wynik na stronie to tomjasonchris
Następnie chcę połączyć wszystkie nazwy przecinkiem, więc zmieniam kod na
this.props.data.map(t => <span>t</span>).join(', ')
Jednak wyrenderowany wynik to [Object], [Object], [Object].
Nie wiem, jak interpretować obiekt, aby stał się komponentem reagującym do renderowania. Jakieś sugestie ?
If the array is empty and no initialValue was provided, TypeError would be thrown.
. więc nie będzie działać dla pustej tablicy.prev
tablicę. np .[1, 2, 3, 4]
staje się[[[1,",",2],",",3],",",4]
..reduce((prev: JSX.Element, current: JSX.Element): any => [prev, (<span> </span>), current])
Możesz użyć
reduce
do połączenia wielu elementów tablicy:To inicjalizuje akumulator wartością null, więc możemy zawinąć pierwszy element w tablicy. Dla każdego kolejnego elementu w tablicy tworzymy nową tablicę, która zawiera wszystkie poprzednie elementy za pomocą
...-operator
, dodajemy separator, a następnie następny element.Array.prototype.reduce ()
źródło
['a'].reduce((a, e) => [...a, ',', e],[])
plony[",", "a"]
. Przekazanie żadnego inicjatora nie działa, chyba że tablica jest pusta, w takim przypadku zwraca TypeError.Zaktualizuj za pomocą React 16: Teraz możliwe jest bezpośrednie renderowanie ciągów, więc możesz uprościć swój kod, usuwając wszystkie bezużyteczne
<span>
tagi.źródło
Zaakceptowana odpowiedź w rzeczywistości zwraca tablicę tablic, ponieważ
prev
za każdym razem będzie tablicą. React jest wystarczająco inteligentny, aby to zadziałało, ale jest podatny na problemy w przyszłości, takie jak złamanie algorytmu różnicującego Reacts podczas podawania kluczy do każdego wyniku mapy.Nowa
React.Fragment
funkcja pozwala nam to zrobić w łatwy do zrozumienia sposób, bez podstawowych problemów.Dzięki temu
React.Fragment
możemy po prostu umieścić separator,
poza zwracanym kodem HTML, a React nie będzie narzekać.źródło
<span>{t}</span>
wracasz jest przedmiotem, a nie ciąg. Sprawdź dokumenty reakcji na ten temat https://facebook.github.io/react/docs/jsx-in-depth.html#the-transformUżywając
.join()
na zwróconej tablicy zmap
, dołączasz do tablicy obiektów.[object Object], ...
Możesz umieścić przecinek wewnątrz,
<span></span>
aby był renderowany tak, jak chcesz.przykład: https://jsbin.com/xomopahalo/edit?html,js,output
źródło
Mój wariant:
źródło
Jeśli chcę tylko wyrenderować tablicę komponentów oddzielonych przecinkami, zwykle uważam, że jest
reduce
zbyt rozwlekła. Krótszym rozwiązaniem w takich przypadkach jest{index > 0 && ', '}
wyświetli przecinek, po którym nastąpi spacja przed wszystkimi elementami tablicy z wyjątkiem pierwszego.Jeśli chcesz, aby oddzielić drugiego do ostatniego elementu i ostatni przez coś innego, powiedzmy ciąg
' and '
, można zastąpić{index > 0 && ', '}
zźródło
Używając es6, możesz zrobić coś takiego:
A potem biegnij:
źródło
Użyj tablicy zagnieżdżonej, aby zachować „,” na zewnątrz.
Zoptymalizuj go, zapisując dane w tablicy i modyfikując ostatni element zamiast sprawdzania, czy jest to ostatni element przez cały czas.
źródło
To zadziałało dla mnie:
źródło
Jak wspomniał Pith , React 16 pozwala na bezpośrednie użycie łańcuchów, więc zawijanie ciągów w znaczniki span nie jest już potrzebne. Opierając się na odpowiedzi Maartena , jeśli chcesz od razu zająć się niestandardową wiadomością (i uniknąć wyrzucania błędu na pustą tablicę), możesz poprowadzić operację za pomocą potrójnej instrukcji if na właściwości length w tablicy. To mogłoby wyglądać mniej więcej tak:
źródło
Powinno to zwrócić płaską tablicę. Obsługuje przypadek s z niemożliwym do iteracji pierwszym obiektem, dostarczając początkową pustą tablicę i filtrując niepotrzebny pierwszy przecinek z wyniku
źródło
Czy tylko ja uważam, że w odpowiedziach ma miejsce dużo niepotrzebnego rozprzestrzeniania się i zagnieżdżania? Punkty za zwięzłość, jasne, ale pozostawia to otwarte drzwi do kwestii skalowania lub zmiany sposobu reagowania na zagnieżdżone tablice / fragmenty.
Jedna tablica, bez zagnieżdżania. Nie ma też seksownego tworzenia łańcuchów metod, ale jeśli często to robisz, zawsze możesz dodać ją do prototypu tablicy lub zawinąć w funkcję, która również pobiera wywołanie zwrotne mapowania, aby zrobić to wszystko za jednym razem.
źródło
źródło