#reactjs #material-ui
Вопрос:
Я использую настроенный IconButton
элемент с ButtonGroup
помощью .
При передаче пустого реквизита также изменяется цвет и форма наведения элемента. Я хочу знать, почему это произошло? Для меня HOC
не должно быть другого эффекта рендеринга при передаче пустой опоры.
Я разместил минимальную среду со страницами GitHub. Этот вопрос показан во второй и третьей главах.
Использование нового настроенного компонента.
Неправильное поведение: кнопки белые и не в группе. Смотрите выделение при наведении второго и третьего «G», на котором основан компонент IconButton
, без передачи {...props}
.
Использование нового настроенного компонента. Все хорошо.
Компонент также основан на IconButton
передаче но {...props}
. Хотя реквизит не передается, следовательно, он должен быть пустым(?). Возможно useStyles
, изменился цвет, но форма фона при наведении тоже изменилась.
Также я поднял соответствующий вопрос об официальном репо и в своей учебной записке
Ответ №1:
Все наоборот, если вы не передадите реквизит IconButton
:
function IconButtonWrapper(props /* unused props */) {
return (
<IconButton>
<DeleteIcon />
</IconButton>
);
}
Затем стили не применяются, и IconButton
изображение отображается простым белым цветом, поэтому ничего не меняется.
Хотя реквизит не передан
Реквизит передается автоматически из ButtonGroup
, даже если вы ничего не передаете. Способ, которым это работает, заключается в том, что ButtonGroup
клонирует дочерний компонент и передает им свой собственный набор реквизитов, поэтому, когда вы сами ничего не передаете, как это:
<ButtonGroup variant="contained">
<IconButtonWrapper />
<IconButtonWrapper />
<IconButtonWrapper />
</ButtonGroup>
У дочернего компонента все еще есть реквизиты, предоставленные родителем, вы можете увидеть это, зарегистрировав реквизиты:
function IconButtonWrapper(props) {
console.log(props);
return (
<IconButton {...props}>
<DeleteIcon />
</IconButton>
);
}
Комментарии:
1. Это объясняет мой вопрос. Теперь ты ясно дал мне это понять, и я чувствую себя глупо, спрашивая об этом. Может быть, раньше я сам себя сбивал с толку. Может быть, я могу отредактировать вопрос и добавить все связанные с ним вещи сюда?
2. Кроме того, могу ли я связать ваш ответ с моей страницей в песочнице?
3. @Pablion не расстраивайся, никто не знает всего, я тоже знаю об этом только после того, как ты задал этот вопрос. И да, ты можешь.
4. Я на самом деле хочу спросить, должен ли я задать 4 отдельных вопроса? Или я должен задавать все вопросы здесь? Я думаю, что сделать 4 отдельных из них понятнее.
5. @Pablion, задав 4 вопроса в одном посте, вероятно, закроет ваш вопрос по причине «требуется больше ясности», поэтому в большинстве случаев это плохая идея.