Рендеринг компонента ReactJS в памяти перед размещением его в DOM

#javascript #reactjs

#javascript #reactjs

Вопрос:

У меня есть концепция плитки в моем приложении.

Плитки загружаются динамически. Затем они могут быть инициализированы для элемента DOM с помощью init метода, при этом плитка сама позаботится о рендеринге.

features/my-tile/tile.js

 import contentsComponentFactory from './components/contents/factory'

const tile = {
  init,
};

// `el` is a DOM element
function init(el) {
  // Render a "contents" ReactJS component (see below) to the DOM - how?
  // Is the following possible?
  el.appendChild(contentsComponentFactory.create({ props }).render());
}

export default tile;
  

У плитки есть компонент contents , который выводит содержимое плитки на экран.

features/my-tile/components/contents/factory.js

 const factory = {
  create
};

function create(options) {
  const component = Object.create(React.Component.prototype);

  component.props = options.props;
  component.state = { message: 'This is a tile' };
  component.render = function() {
    return <div>{this.state.message}</div>;
  };

  return component;
}

export default factory;
  

В AngularJS, в init я бы рендерил содержимое в памяти и вставлял результат в DOM. Могу ли я сделать это в ReactJS?

Я новичок в ReactJS и поэтому, возможно, я что-то совершенно неправильно понимаю.

Ответ №1:

Вы должны иметь возможность использовать React.createElement для создания элемента в памяти, а затем ReactDOM.render() для вставки его в DOM.

 const element = React.createElement('div', null, 'Hello, World!');
ReactDOM.render(element, document.getElementById('content'));
  

http://codepen.io/mikechabot/pen/PGXwxa?editors=1010

Однако, createElement возвращает не собственный элемент DOM, а скорее экземпляр ReactElement. Не уверен, соответствует ли это вашим потребностям.

Ответ №2:

Это кажется довольно сложным способом выполнения чего-либо в AngularJS, может быть, вам следует пересмотреть свой дизайн?

В React все еще хуже, вы собираетесь обойти ReactDOM и вставить его вручную?

Я бы рекомендовал, по крайней мере, ознакомиться с руководством по React, прежде чем пытаться это сделать.

Комментарии:

1. Я хотел бы иметь возможность динамически загружать библиотеку и заставлять этот компонент самостоятельно выполнять рендеринг, когда его об этом попросят. В данном случае с использованием ReactJS (другие компоненты могут быть Angular или что-то еще). Резюмируя: страница рендерится. Затем я загружаю библиотеку компонентов tile по сети. На более позднем этапе мне нужно рендерить этот компонент в ранее отрисованный DOM. Мое «решение», приведенное выше, заключается в рендеринге компонента в памяти, а затем вставке его в DOM. Какой способ сделать это лучше?

2. Похоже, вы повторно внедряете базовую функциональность фреймворка, я настоятельно рекомендую вам сначала научиться использовать React. Просто используйте ReactDOM.render по назначению, при необходимости у вас может быть несколько точек монтирования.

3. Хорошо, спасибо. Итак, использование ReactDOM.render — это способ использовать этот вариант использования? Я новичок в React и с тех пор прочитал различные вводные тексты.