"если он скрыт, он не отобразит дочерний элемент."
Вы не должны передавать ребенка, если он не предназначен для визуализации.
Вы также должны сообщить MyComponent, должен ли он отображаться или нет, независимо от его дочерних элементов, т. Е. Вы должны передавать onEditable
в MyComponent, предварительно вычислив значение, а не передавая ту же информацию дочерним элементам и обратно в родитель.
Это называется «снятием состояния», которое соответствует быстродействующему отказу и шаблону / рекомендациям по проектированию с ранним возвратом и детерминированному одностороннему потоку данных, на который опирается React (и пытается применить его).
Ну, React работает сверху вниз, и родители фактически указывают реквизиты для детей. Я на 99% уверен, что у вас все задом наперед, и что вы должны говорить детям isVisible={true}
или isVisible={false}
в зависимости от this.props.isEditable
. (или добавить classNames / не отображать их).
Единственный способ, которым дети могут настроить родителей, - это обратные вызовы или глобальный менеджер состояний, такой как redux, который вводит реквизиты обратно в родителя.
Если ваш ребенок волшебным образом получает информацию о том, должен ли он отображаться, ему следует позвонить по номеру this.props.onMagicallyGotSomeInformation
. В противном случае состояние должно существовать у ближайшего родителя, который знает эту информацию, и оно должно передаваться / потребляться при необходимости.
Другая критика заключается в том, что операторы короткого замыкания и используемый вами синтаксис причинят вам гораздо больше боли, чем стоит. Используйте const
, если операторы и фигурные скобки :) это сделает вашу жизнь проще в долгосрочной перспективе.
HOC - это ключевое слово, это всего лишь промежуточный уровень для определения того, какие реквизиты следует использовать или пересылать детям, и я бы обычно использовал cloneElement
для настройки детей. У детей не должно быть такой информации, и если они ее получают, вы должны получать эту информацию с помощью обратных вызовов.