Можно ли использовать REactJS без виртуального DOM? Мне трудно использовать ReactJS с сторонними инструментами из-за виртуального DOM. Было бы гораздо легче работать, если бы я мог превратить виртуальный дом. Это возможно?ReactJS без виртуального DOM
ответ
Глобальное отключение виртуального DOM в значительной степени приведет к поражению цели React framework, но имеет смысл иметь отдельные компоненты, которые используют библиотеки DOM-манипулирования.
Я предполагаю, что проблема заключается в том, что React не знает о каких-либо изменениях DOM, которые вы делаете с другими инструментами или библиотеками, а также переопределяет свои компоненты и перезаписывает все, что вы делаете. Чтобы предотвратить это, вы можете определить shouldComponentUpdate
, чтобы предотвратить React от обновления вашего компонента. Другие методы жизненного цикла, такие как componentWillReceiveProps
, могут использоваться для вызова вашей сторонней библиотеки и выполнения любых изменений, которые необходимо выполнить, когда ваши реквизиты меняются.
Быстрый поиск this tutorial, который объединяет стороннюю библиотеку с React. Я не знаком с этой конкретной библиотекой, но общие понятия там должны применяться ко всем случаям, когда у вас есть DOM-мутирующая библиотека, и вам необходимо предотвратить React от шага по всему этому.
Часть of the raison d'être of React заключается в том, чтобы избежать ручного манипулирования DOM. Используя виртуальную DOM, React делает как можно меньше изменений с помощью процесса, который называется Reconciliation.
В идеале вы никогда не должны вручную манипулировать DOM - пусть React сделает это. Конечно, поскольку вы, возможно, обнаружили, что есть ситуации, когда это невозможно (хорошим примером является использование анимации d3.js внутри React). Как отметил @Mad Scientist, лучшим решением, если вам действительно нужно коснуться DOM, является использование React's Lifecycle Methods.
Вот пример из кода, который я недавно писал:
import React from 'react';
import PureRenderMixin from 'react-addons-pure-render-mixin';
import d3 from 'd3';
module.exports = React.createClass({
mixins: [PureRenderMixin],
componentDidMount() {
this.componentDidUpdate();
},
componentDidUpdate() {
let svg = d3.select(this.svg);
// Now, svg contains the svg DOM node that React rendered for this component
// Do any manual manipulations to that DOM node here
},
_svg (ref) {
this.svg = ref;
},
render() {
let props = this.props;
return (
<svg height={props.height} width={props.width} ref={this._svg}></svg>
);
}
});
Что я сделал здесь используется Реагировать refs сохранить внутреннюю ссылку на узел DOM, оказываемое Реагировать. Затем в componentDidUpdate
я использую внешнюю библиотеку (в этом случае d3.js), чтобы захватить узел DOM с помощью Refact ref (вместо того, чтобы искать его непосредственно в DOM). Когда я это сделаю, я внес свои изменения туда. Я также использую React's PureRenderMixing
, чтобы гарантировать, что компонент не нуждается в обновлении.
Надеюсь, это поможет.
- 1. ReactJS DOM dynamic refs
- 2. Shadow DOM и ReactJS
- 3. ReactJS не дает выход DOM
- 4. ReactJS манипулирует существующим элементом DOM
- 5. reactjs typescript - справочная документация DOM
- 6. ReactJS не меняет элемент DOM
- 7. ReactJS: создать DOM на лету
- 8. reactjs анимировать один элемент DOM без повторного рендеринга компонента
- 9. DOM переоформление без какого-либо обновления в reactjs
- 10. Реализация чистого виртуального метода с/без виртуального?
- 11. Полиморфное поведение без виртуального
- 12. Zend2 без виртуального хоста
- 13. Как перестроить существующий Dom in reactjs?
- 14. Тестирование Reactjs без узла?
- 15. ReactJS динамический маршрут без «/»
- 16. Reactjs flux без npm
- 17. React.js: javascript vs reactjs DOM-манипуляции
- 18. Как распечатать/log reactjs rendered dom?
- 19. Как изменить DOM непосредственно в ReactJS
- 20. ReactJS - Импортирующий компонент не отображается в DOM
- 21. ReactJs 0.14 - Найти dom Узел динамического элемента
- 22. ReactJS с TypeScript, не отображающим DOM
- 23. reactjs можно получить уведомление после обновления DOM?
- 24. ReactJS: как обновить React from the DOM
- 25. Переопределение защищенного виртуального без наследования
- 26. OpenStack Установка без виртуального бокса
- 27. Приложение Rails без виртуального хоста
- 28. Запустите приложение ReactJS без порта
- 29. Элемент dom dom без использования свойств стиля?
- 30. Обновление виртуального виртуального питона?
Хотя, возможно, я могу сказать, что вы не должны этого делать, поскольку он будет реагировать так медленно. – Dodekeract