Решение здесь состоит в том, чтобы переместить состояние и действие к общему предку.
Кажется, у вас есть 3 компонента:
Где, в основном, navbar
инкапсулирует и nav-bar
, и nav-aside
:
, таким образом, у вас есть в основном это в вашем navbar
:
<NavBar />
<NavAside />
и внутри nav-bar
есть кнопка, которая должна переключаться, если что-то внутри nav-aside
показано. Тогда решение состоит в том, чтобы сохранить эту информацию в компоненте navbar
для переноса:
class NavbarComponent extends Component {
@tracked showSomethingInAside = false;
@action
toggleShowSomethingInAside() {
this.showSomethingInAside = !this.showSomethingInAside;
}
}
и использовать его для вызова компонентов в navbar
:
<NavBar @toggleSomethingInAside={{this.toggleShowSomethingInAside}} />
<NavAside @showSomethingInAside={{this.showSomethingInAside}} />
Затем внутри nav-bar
вы можете использовать действие:
<button type="button" {{on "click" @toggleSomethingInAside}}>
show something in aside
</button>
А внутри nav-aside
вы можете использовать логическое значение:
{{#if @showSomethingInAside}}
This can be toggled by the button in the other component
{{/if}}
Таким образом, вы видите, что решение всегда держать государство в нужном месте. Если несколько компонентов совместно используют состояние (потому что один изменяет его, а другой читает его), это состояние не принадлежит ни одному из компонентов, а является общим компонентом-предком.