Meteorjs + React, как отрендерить несколько элементов в Meteor.startup

Я пытаюсь объявить два разных элемента React, которые я хотел бы отобразить. Оба элемента являются отдельными элементами, такими как отображаемые элементы (App.jsx) и настраиваемая система учетных записей (Login.jsx). Но в моем тесте у меня есть один и тот же код в обоих файлах jsx, чтобы убедиться, что проблема не связана с определенной их частью.

Я также создал файл /imports/startup/client/index.js (он называется в файле /client/main.js):

import React from 'react';
import { Meteor } from 'meteor/meteor';
import { render } from 'react-dom';

import './accounts-config.js';
import App from '/imports/ui/App.jsx';
import Login from '/imports/ui/Login.jsx';

Meteor.startup(() => {
    render(<App />, document.getElementById('app'));
    render(<Login />, document.getElementById('login'));
})

а /client/main.html содержит связанные теги div:

...
<div id = "app"></div>
<div id = "login"></div>
...

Проблема в том, что второй рендеринг никогда не отображается (здесь логин div), и я заметил, что интерпретируется только первый рендер.

Все примеры, которые я нашел, относятся только к одному элементу реакции. Поэтому мне интересно, как использовать несколько отдельных элементов реакции, как в моем html-файле?

Я новичок в мире Meteorjs и React, так что, возможно, я не понял правильной философии ...

преобразовать App и Login в другой компонент. Затем визуализируйте этот компонент внутри Meteor.startup (). Что-то вроде: render(<NewComponent />, document.getElementById('app'));

Varuna 18.06.2018 17:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
96
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать новую функцию React 16 - портал.

Чтобы узнать, как использовать ReactDOM.createPortal, перейдите по следующей ссылке: Как использовать ReactDOM.createPortal () в React 16?

Ответ принят как подходящий

Я решил свою проблему, используя только один рендер в Meteor.startup (() (в моем index.js). Документ React указывает, что только один рендер может быть объявлен в Meteor.startup (() (в моем index.js). https://reactjs.org/docs/components-and-props.html

Мой код следующий: в моем index.js

Meteor.startup(() => {
    render(<App />, document.getElementById('app'));
})

Хитрость в том, что этот компонент Super (App.jsx) должен использоваться для вызова всех остальных компонентов. В моем примере путем вызова компонента входа в систему:

render() {
    return (
        <div className = "container">
            <Login />
        </div>
    )
}

Я считаю, потому что оператор render () также имеет неявный оператор возврата, поэтому, поскольку он может выполнять и возвращать только один, следующий оператор визуализации не выполняется.

Другие вопросы по теме