W rzeczywistości jest na to wiele sposobów.
Chcesz użyć JSX w swoich rekwizytach
Możesz po prostu użyć {}, aby JSX przeanalizował parametr. Jedyne ograniczenie jest takie samo jak w przypadku każdego elementu JSX: musi zwracać tylko jeden element główny.
myProp={<div><SomeComponent>Some String</div>}
Najlepszym czytelnym sposobem na to jest utworzenie funkcji renderMyProp, która zwróci komponenty JSX (tak jak standardowa funkcja renderująca), a następnie po prostu wywołaj myProp = {this.renderMyProp ()}
Chcesz przekazać tylko HTML jako ciąg
Domyślnie JSX nie pozwala na renderowanie surowego kodu HTML z wartości ciągów. Jest jednak sposób, aby to zrobić:
myProp="<div>This is some html</div>"
Następnie w swoim komponencie możesz go użyć w ten sposób:
<div dangerouslySetInnerHTML=myProp={{ __html: this.renderMyProp() }}></div>
Należy pamiętać, że to rozwiązanie „może” otwierać się w przypadku ataków fałszerstw opartych na skryptach między witrynami. Uważaj również, że możesz renderować tylko prosty HTML, bez znacznika lub komponentu JSX ani innych fantazyjnych rzeczy.
Sposób tablicy
W reakcji możesz przekazać tablicę elementów JSX. To znaczy:
myProp={["This is html", <span>Some other</span>, "and again some other"]}
Nie polecałbym tej metody, ponieważ:
- Stworzy ostrzeżenie (brakujące klucze)
- To jest nieczytelne
- To naprawdę nie jest sposób JSX, to bardziej hack niż zamierzony projekt.
Droga dzieci
Dodając to ze względu na kompletność, ale w odpowiedzi możesz również uzyskać wszystkie dzieci, które są „wewnątrz” twojego komponentu.
Więc jeśli wezmę następujący kod:
<SomeComponent>
<div>Some content</div>
<div>Some content</div>
</SomeComponent>
Wtedy te dwa elementy div będą dostępne jako this.props.children w SomeComponent i mogą być renderowane przy użyciu standardowej składni {}.
To rozwiązanie jest idealne, gdy masz tylko jedną treść HTML do przekazania do swojego komponentu (wyobraź sobie komponent Popin, który przyjmuje tylko zawartość Popina jako dzieci).
Jeśli jednak masz wiele treści, nie możesz używać dzieci (lub musisz przynajmniej połączyć to z innym rozwiązaniem tutaj)