Я использую компонент Panel из Office UI Fabric (https://developer.microsoft.com/en-us/fabric#/components/panel).) Панель разделяется на верхний и нижний колонтитулы, содержимое и нижний колонтитул, где содержимое всегда прокручивается, если в него помещается слишком много строк. Я хочу сделать, это добавить некоторые другие компоненты в заголовок, чтобы сделать его липким внутри панели (в данном случае Pivot, рендеринг некоторых вкладок).
Обычно это возможно с помощью свойства обратного вызова onRenderHeader
Panel. При использовании этого я должен перерисовать весь заголовок с классами, чтобы получить тот же внешний вид, но дополнительно добавить свои собственные компоненты. Проблема в том, что я не могу просто установить ms-Panel-header header
как свойство className
, так как, по крайней мере, header
не существует как селектор класса, а только как версия с областью видимости с сгенерированным id-суффиксом (например, header-103
), который может изменить при изменении структуры DOM. Следовательно, мне нужно получить доступ к этим сгенерированным классам.
Единственное, что я мог придумать, это сохранить ссылку на экземпляр компонента Panel и использовать внутреннее свойство _classNames
при рендеринге моего пользовательского заголовка.
Вот выдержка (с использованием TypeScript):
private handleRenderHeader(): JSX.Element {
const classNames = (this.panel.current as any)._classNames;
return (
<div className={classNames.header}>
<p className={classNames.headerText} role="heading">
My Headline
</p>
<Pivot
selectedKey={this.selectedEntriesCategory}
onLinkClick={this.handleSelectedEntriesCategoryClicked}
headersOnly={true}
>
<PivotItem linkText="First Tab" itemIcon="Contact" />
<PivotItem linkText="Second Tab" itemIcon="Group" />
</Pivot>
</div>
);
}
Это единственное решение этой проблемы или есть какой-то "официальный" способ добиться этого? Я что-то упустил?