Пока asyncData не отработает - компонент не отрендерится и не замнотируется.
При стандартном подходе компонент сначал рендерит заглушку, потом грузит данные, потом рендерит что-то на основе данных, при asyncData он ничего не делает пока нет данных. Это удобнее.
Увы asyncData не идеальна, из-за архитектуры vue-router(я в своё время глубоко разбирался, увы без полного переписывания vue-router особо лучше не сделаешь), но всё равно удобней чем делать то же самое руками.