Обновите компонент на основе изменения в другом компоненте в HybridsJS

#javascript #node.js #typescript #frontend #web-component

Вопрос:

У меня есть App.ts, содержащий два веб-компонента.

Приложение.ts

 import { html } from 'hybrids';

export const App = {
    render: () => html`
        <dcs-sidebar onsidebar-collapse="${doSomething}"></dcs-sidebar>
        <dcs-content></dcs-content>
    `,
};

function doSomething(host: any, event: any) {
    let ContentContainer = host.shadowRoot.querySelector('dcs-content').shadowRoot.querySelector('.Content');

    ContentContainer.style.setProperty('margin-left', '80px');
}
 

И я хочу изменить html-тег внутри <dcs-content> на основе <dcs-sidebar> нажатия кнопки.

Я смог заставить родителя App.ts прослушивать событие с помощью диспетчеризации. И внутри App.ts я могу получить доступ к DOM, чтобы внести изменения, но я думаю, что это не лучший способ.

Боковая панель.ts

 import { html, dispatch } from 'hybrids';

export const Sidebar = {
    render: () => html`
        <style> ... </style>

        <div class="Sidebar">
            <button onclick="${collapseSidebar}">
        </div>
    `,
};

function collapseSidebar(host:any, event:any) {
    const sidebar = host.shadowRoot.querySelector('.Sidebar');

    sidebar.style.width === '80px';

    dispatch(host, 'sidebar-collapse')
}
 

Комментарии:

1. Общение с помощью событий, как правило, считается хорошим методом