#javascript #reactjs
Вопрос:
Я только начал изучать react JS .И поэтому я просто хотел знать, можем ли мы отображать элементы из нескольких файлов JS в корневом узле в React JS ? Если да, то как, а если нет, то почему?
Например, я пытался сделать это
В index.js
import React from 'react';
import ReactDOM from 'react-dom';
import 'bootstrap/dist/css/bootstrap.css';
import Counter from './components/counter';
const x="one";
const y=<div><h2>Zero, {x}</h2><h1>{x=="one"?"two":"three"}</h1></div>
ReactDOM.render(y,document.getElementById('root'));
В one.js
import react from 'react';
import React from 'react';
import ReactDOM from 'react-dom';
const a="def";
const b="abc {a}";
ReactDOM.render(b,document.getElementById('root'));
Но вывод в браузере был просто
Ноль, один два
Комментарии:
1. Все приложение React загружается путем его введения в узел dom. У вас может быть более 1 приложения React на странице. Вы должны пройти через их учебник, прежде чем что-либо еще, b/c многие концепции отличаются от манипуляций с ванильным js dom. reactjs.org/tutorial/tutorial.html
2. Кроме того, важно понимать, что то, что выглядит как html в React, НЕ является html. На самом деле это javascript в виде JSX. Это вызовет у вас всевозможные проблемы, пока вы этого не поймете.
3. Это именно то, что
ReactDOM.render
нужно сделать, это взять первый аргумент и добавить его ко второму аргументу, чтобы вы могли использовать первый аргумент в виде комбинации нескольких элементов. Я не знаю, чего вы ожидали, запустив приведенный выше код, но результат, который вы получаете, правильный
Ответ №1:
Он index.js
служит корневым файлом, в котором все компоненты сводятся к одному родительскому компоненту (обычно это тот App.js
), который затем вводится в реальный DOM. Хотя вы не можете отобразить несколько компонентов в корневом узле из-за того, как работает react, тем не менее, возможно отобразить несколько компонентов, расположенных рядом с корневым узлом. Это может быть достигнуто с помощью createPortal
метода на ReactDOM
объекте. Во-первых, создайте смежные узлы с корневыми узлами внутри index.html
.
<div id='root'></div>
<div id='adjacent'></div> <!-- Adjacent node to the root node by the id adjacent -->
Добавьте компонент, который будет отображаться как соседний узел в корневом компоненте (обычно App.js
).
App.js
export default function App(){
return(
ReactDOM.createPortal(<ComponentToBeRenderedAdjacentToRootNode/>,document.getElementById('adjacent'));
<ComponentToBeRenderedInRootNode/>
)
}
Когда вы запустите приложение и просмотрите веб-страницу, структура DOM будет выглядеть примерно так.
HTML браузера
<html>
<head>
...
</head>
<body>
<div id='root'> Root component and it's children components rendered here</div>
<div id='adjacent'> ComponentToBeRenderedAdjacentToRootNode and it's children components rendered here</div>
</body>
</html>