Chcę używać Reacta do wielokrotnego dodawania komponentów w całym DOM. To skrzypce pokazuje, co chcę zrobić, i nie powoduje żadnych błędów. Oto kod:
HTML:
<div id="container">
<!-- This element's contents will be replaced with the first component. -->
</div>
<div id="second-container">
<!-- This element's contents will be replaced with the second component. -->
</div>
JS:
var Hello = React.createClass({
render: function() {
return <div>Hello {this.props.name}</div>;
}
});
React.render(<Hello name="World" />, document.getElementById('container'));
React.render(<Hello name="Second World" />, document.getElementById('second-container'));
Widziałem to pytanie i obawiam się, że wykonując powyższe, zaryzykuję, że komponenty React będą ze sobą kolidować. Odpowiedź na to pytanie sugeruje użycie renderowania po stronie serwera, co nie jest dla mnie opcją, ponieważ używam Django po stronie serwera.
Z drugiej strony, może to, co robię, jest w porządku, ponieważ mam zamontowaną tylko jedną instancję biblioteki React (w przeciwieństwie do wielu komponentów wywołujących własną instancję React)?
Czy ten sposób korzystania z wielu instancji DOM jest dobrym sposobem na używanie Reacta?
ReactDOM.render()
które muszą wstawiać komponenty w tym samym, wdiv
zależności od otwieranej strony? W szczególności masz tylko jeden ukryty połączonyapp.js
zasób, który znajduje się<script src="app.js">
na każdej stronie. I to ładuje biblioteki, powiedzmy, jQuery, Bootstrap, React i ma twój niestandardowy kod JS i komponenty React. Jeśli odwiedzasz/foo
, maszReactDOM.render(<Foo />, getElemById('content'))
. Jeśli odwiedzasz/bar', you have
ReactDOM.render (<Bar />, getElemById ('content')) `. Oni przeszkadzają. Jak sobie z tym radzisz?ReactDOM.render(<Foo/>, document.getElementById('content').appendChild(document.createElement('div')))
To podejście jest dobre z punktu widzenia wydajności ładowania strony, ale są też inne wady i jeśli to możliwe, należy unikać wielu korzeni React.
Więcej raeding - https://github.com/facebook/react/issues/12700
źródło