Простой ответ (но плохо) - Вы можете просто сделать дважды в другом корне, как показано ниже.
import React from "react";
import ReactDOM from "react-dom";
function App({ value }) {
return <div className="App">{value}</div>;
}
const root1 = document.getElementById("root1");
ReactDOM.render(<App value="value1" />, root1);
const root2 = document.getElementById("root2");
ReactDOM.render(<App value="value2" />, root2);
Но проблема в том, что теперь эти два компонента не находятся в одном и том же дереве React, поэтому не могут взаимодействовать друг с другом.
Если вам нужен центральный контейнер, который извлекает данные, но хочет передавать данные, вы можете использовать React Portal в v16 +.
Вы можете сделать что-то сумасшедшее, например this с Portal.
Предположим,что вы хотите передать value1
& value2
следующим div
с.
<body>
<div id="root"></div>
<div id="value1">
<div id="value2">
...
</body>
, где root
div - это главное дерево React, на котором смонтировано.
Вы можете создатьпортал, монтируясь на эти value1&2
div, как показано ниже.
import React, { Component } from "react";
import ReactDOM from "react-dom";
class ValuePortal extends Component {
constructor(props) {
super(props);
this.el = document.getElementById(props.elementID);
}
render() {
return ReactDOM.createPortal(this.props.value, this.el);
}
}
function App() {
return (
<div className="App">
<ValuePortal elementID="value1" value="for value1" />
<ValuePortal elementID="value2" value="for value2" />
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Ваш основной контейнер монтируется в root
, как показано выше, и значения отображаются с использованием компонента портала, ValuePortal
.
Вы можете следить за CodeSandBox.