Размонтировать React Parent без размонтирования Child
Возможно ли отключить родительский компонент компонента React без отключения дочернего элемента? Какие обходные пути существуют для достижения этого результата? Конечно, должен быть какой-то (потенциально хакерский) способ сделать это.
пример
Когда это:
<Parent>
<Child/>
</Parent>
изменения к этому:
<Child/>
мне бы хотелось Parent
метод жизненного цикла componentWillUnmount
быть вызванным без Child
метод жизненного цикла componentWillUnmount
будучи призванным
Я понимаю, что это может быть невозможно, но мне было интересно, есть ли у кого-нибудь творческое решение этой проблемы.
Обновить
Вот мой конкретный пример использования (надеюсь, я достаточно хорошо объяснил это):
У меня есть компонент более высокого порядка, который не вводит никаких новых элементов dom, но, по сути, просто вводит некоторый новый контекст для дочернего компонента. Дочерний компонент визуализируется немного по-разному в зависимости от того, присутствует этот контекст или нет. К сожалению, когда я удаляю и добавляю родителя, создается новый экземпляр потомка, который отключает / перемонтирует. Единственная проблема с этим размонтированием и перемонтированием заключается в том, что дочерний элемент выполняет некоторые измерения dom, чтобы решить, показывать или нет горизонтальную полосу прокрутки и меню переполнения для некоторых его элементов. Когда он размонтируется / перемонтируется, это меню выглядит неприглядно.
1 ответ
Вы могли бы справиться с логикой рендеринга. Например, внутри вашей функции рендеринга:
if (showParent) {
return (
<Parent>
<Child/>
</Parent>);
} else{
return <Child/>;
}
Тогда всякий раз, когда логическое showParent
Изменения компонента визуализируются по-разному.
Супер-родительский объект, вызывающий метод render(), должен хранить состояние, чтобы обновлять их и сохранять дочерний элемент (и родительский объект на случай, если вы захотите включить его снова).
Следовательно, оно также должно содержать состояние ребенка, чтобы его можно было сохранить. Другими словами: перемещайте модель иерархически до суперпредставителя.