Еще одна скрытая в настоящее время проблема в компиляторе Stencil - это контекст Prop (). В этой статье я постараюсь вкратце объяснить, что это такое и как им пользоваться.

Контекст Prop ()

В предыдущем посте я объяснил, как разделить состояние между компонентами в Stencil. В этом посте я объяснил, как использовать соединение Prop (). Контекст Prop () по синтаксису напоминает соединение Prop (), но был создан для другой цели. В Stencil есть объект CoreContext, который включает в себя различные полезные предустановленные свойства. Вот его текущий интерфейс:

export interface CoreContext {
    addListener?: AddEventListener;
    attr?: number;
    dom?: DomController;
    emit?: (elm: Element, eventName: string, data?: EventEmitterData) => void;
    enableListener?: EventListenerEnable;
    eventNameFn?: (eventName: string) => string;
    isClient?: boolean;
    isPrerender?: boolean;
    isServer?: boolean;
    window?: Window;
    location?: Location;
    document?: Document;
    mode?: string;
    [contextId: string]: any;
}

Примечание. Интерфейс CoreContext может измениться в будущем.

В составе свойств CoreContext вы можете найти флаги, которые помогут вам понять, работает ли код вашего компонента в режиме сервера или в режиме клиента / браузера. Другие свойства CoreContext представляют собой ссылку на местоположение, объекты документа и окна и многое другое. Данные контекста могут быть введены в компонент с помощью контекста Prop ():

@Prop({ context: 'isServer' }) private isServer: boolean;

Как видно из кода, вы передаете объект декоратору Prop () с элементом контекста и именем члена (из интерфейса, представленного ранее). Позже в компоненте вы сможете использовать данные контекста как обычное свойство вашего компонента:

componentWillLoad() {
    if (!this.isServer) {
        fetch('http://...').then(...)
    }
}

Резюме

Контекст Prop () может быть очень полезен для внедрения данных Stencil CoreContext в ваши компоненты. Это может пригодиться в основном в сценариях рендеринга на стороне сервера, но, возможно, в будущем это будет полезно и в других сценариях.