У меня есть компонент, Split
, который занимает двоих детей. Первый ребенок будет отображаться в левой части экрана & вторым ребенком с правой стороны. Если ширина экрана будет ниже определенной точки, тогда отобразится только правая сторона, а левая сторона будет удалена из DOM.Реагировать: Предотвратить повторный набор, когда родительские ререйдеры
Пример детей может быть компонентом Sidebar
и компонентом Content
. Для мобильных устройств я не хочу отображать меню, но имею специальное мобильное меню, которое я всплываю.
Мой вопрос: Как я могу удалить компонент Sidebar
без размонтирования & переустановка компонента Content
?
В принципе у меня есть что-то вроде этого:
<Split>
<Sidebar/>
<Content/>
</Split>
И Split
«s метод визуализации выглядит примерно так:
let children;
let firstChild = this.props.children[0];
let lastChild = this.props.children.pop();
if (this.state.responsive === 'singleColumn') {
children = (
<div>
<div style={{display: 'none'}}>{firstChild}</div>
{lastChild}
</div>
);
} else {
children = (
<div>
{firstChild}
{lastChild}
</div>
);
}
return (
<div>
{children}
</div>
);
Даже если {LastChild} всегда визуализируется, независимо от того, что он по-прежнему размонтируется и монтируется каждый раз, когда раскол должен перерисовываться!
Даже имея рендер, который выглядит следующим образом:
return (
<div>
{this.props.children.pop()}
</div>
);
вызывает последний ребенок (который никогда не меняется), чтобы быть демонтирована & перемонтирована перед тем, как оказано.
Если я вместо изменения Split
и передать компонент, который всегда будет в DOM в качестве атрибута, как так:
<Split staticComponent={<Content />}>
<Sidebar />
</Split>
он прекрасно работает. Тогда почему это не работает, когда я просто выталкиваю последнего такого ребенка {this.props.children.pop()}
в противоположность этому {this.props.staticComponent}
Есть ли разумный способ решить эту проблему?
Я понял, что вы имеете в виду сейчас, следовательно, вы пытаетесь использовать css здесь? это больше проблема с этим нет? при определенном размере экрана вам нужно изменить стиль на этом дочернем элементе: none..hope, который помогает – JordanHendrix
проверить эту статью, примерно на полпути вниз, они проходят аналогичный сценарий на основе размера экрана https: // medium.com/@jviereck/modularise-css-the-react-way-1e817b317b04#.wew0pfsyh – JordanHendrix
Ну, дело в том, что Split поступает из библиотеки, и это действительно приятно и отлично работает без написания каких-либо CSS, кроме этой проблемы. Поэтому чистым решением для CSS является не то, что я хочу. Я хочу, чтобы React переместил компонент {lastChild}, а не удалял и вставлял его в DOM. –