Я пытаюсь преобразовать свое приложение в метод рендеринга React 18.
У меня есть компонент класса, который не отображается в элемент root. Как получить элемент createRoot для рендеринга компонента и куда его поместить
const root = ReactDOM.createRoot(document.getElementById("myrenderelement"));
// please notice I'm not rendering to root as I said above ^^^
Это выходит за рамки определения класса, в состоянии... где? Если я помещу его вне класса, я получаю эту ошибку:
Syntax error: Unexpected token (80:6)
78 |
79 |
> 80 | root.render() {
| ^
81 | return (
82 | <div className = "myclass">
83 | <div className = "container">
То же самое для
root = ReactDOM.createRoot(document.getElementById("myrenderelement"));
root.render() {
И к
ReactDOM.createRoot(document.getElementById("myrenderelement")).render() {
Я всегда говорю "Неожиданный токен" в этой строке
Если я попытаюсь:
class MyClass extends React.Component {
constructor(props) {
super(props)
this.state = {
<my state vars>
root: ReactDOM.createRoot(document.getElementById("myrenderelement"))
}
}
....
Затем
this.state.root.render() { <whatever>
Я снова получаю неожиданный токен в строке рендеринга:/
Как визуализировать компонент класса?
Для root.render не имеет значения, является ли ваш компонент class компонентом или функциональным компонентом. В любом случае вы передаете элемент React для рендеринга (обычно создаете элемент через JSX), как показано на странице, на которую ссылается версия React v18 для разработчиков, если вы используете старый способ:
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<Example />);
class Child extends React.Component {
render() {
return <div>Child Component</div>;
}
}
class Example extends React.Component {
render() {
return (
<div>
Top-Level Component
<Child />
</div>
);
}
}
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<Example />);
<div id = "root"></div>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/18.1.0/umd/react.development.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.1.0/umd/react-dom.development.js"></script>
Вы используете это только для корня вашего приложения, верхнего уровня. Не в элементах, отображаемых этим элементом верхнего уровня.
Что я делал неправильно, так это то, что я подменял метод рендеринга и во внутренних компонентах, а не только в корне. Как только я удалил код оттуда, он заработал. Спасибо. :)