Размонтировать 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(), должен хранить состояние, чтобы обновлять их и сохранять дочерний элемент (и родительский объект на случай, если вы захотите включить его снова).

Следовательно, оно также должно содержать состояние ребенка, чтобы его можно было сохранить. Другими словами: перемещайте модель иерархически до суперпредставителя.

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