Учитывая простой компонент, который делает его потомки:
class ContainerComponent extends Component {
static propTypes = {
children: PropTypes.object.isRequired,
}
render() {
return (
<div>
{this.props.children}
</div>
);
}
}
export default ContainerComponent;
Вопрос: Каким должен быть propType детей prop?
Когда я устанавливаю его как объект, происходит сбой при использовании компонента с несколькими дочерними элементами:
<ContainerComponent>
<div>1</div>
<div>2</div>
</ContainerComponent>
Предупреждение: Ошибка типа проп: Invalid опора
children
типа ,array
подаваемогоContainerComponent
, как ожидаетсяobject
.
Если я установлю его как массив, произойдет сбой, если я дам ему только один дочерний элемент, т.е.
<ContainerComponent>
<div>1</div>
</ContainerComponent>
Предупреждение: Ошибка типа проп: недопустимые потомки объекта типа объекта, переданные в ContainerComponent, ожидаемый массив.
Пожалуйста, посоветуйте, не стоит ли мне заняться проверкой propTypes для дочерних элементов?
reactjs
jsx
react-proptypes
d3ming
источник
источник
node
Ответы:
Попробуйте что-то вроде этого, используя
oneOfType
илиPropTypes.node
или
источник
children
элементом : «Предупреждение: сбойный тип пропуска: недопустимая опора типаobject
... ожидается массив».children: PropTypes.node
это сработало в обоих случаях. Спасибо за предложения =)React.PropTypes.node
описывает любой визуализируемый объект.PropTypes.node
. Это обрабатывает следующее исправление: ничего, строка, один элемент, несколько элементов, фрагмент, компонент.Для меня это зависит от компонента. Если вы знаете, что вам нужно для заполнения, то вы должны попытаться указать исключительно или несколько типов, используя:
Однако я в основном нахожу, что с более общими компонентами, которые могут иметь много типов потомков, я счастлив использовать:
Если вы хотите сослаться на компонент React, вы будете искать
Хотя,
описывает все, что может быть визуализировано - строки, числа, элементы или массив этих вещей. Если это вас устраивает, то это путь.
источник
Proptypes.any
это слишком распространенный тип. Эслинт не доволен этим.Документация PropTypes имеет следующее
Таким образом, вы можете использовать
PropTypes.node
для проверки объектов или массивов объектовисточник
Ответы здесь, кажется, не совсем точно проверяют детей.
node
иobject
слишком вседозволен, я хотел проверить точный элемент. Вот что я в итоге использовал:oneOfType([])
для разрешения одного или множества детейshape
иarrayOf(shape({}))
для одиночного и массива детей соответственноoneOf
для самого дочернего элементаВ итоге как то так:
Эта проблема помогла мне понять это более четко: https://github.com/facebook/react/issues/2979
источник
Если вы хотите точно подобрать тип компонента, отметьте это
Если вы хотите точно подобрать некоторые типы компонентов, отметьте это
источник
Попробуйте пользовательские propTypes:
скрипка
Показать фрагмент кода
источник
Пример:
Рисунок: показывает ошибку в консоли, если ожидаемый тип отличается
источник