это в решадоу под капотом реализовывается)
т.е. пишется button[|size="s"][type="submit"][disabled][ {...}
и в тот момент, когда у элемента <button /> будет описанное состояние, применятся нужные классы. и это делается весьма эффективно
вот тут есть сравнение разных решений, в т.ч. с использованием веб-компонентов:
https://uijux.sse.codesandbox.io/