Привет.
Vue > React по огромной куче разных причин. Работал и с тем и с другим, как над своими проектами, так и на работе.
Ну тут конечно только мой субъективный опыт, и, возможно, есть способ решать эти проблемы, но я делюсь именно субъективным опытом.
1) Однофайловые компоненты. Когда ты пишешь на реакте класс (или, тем более, функциональный компонент), у тебя очень даже хорошо перемешивается представление и всякая логика. У тебя могут в классе рядом лежать функции onClick, onKeyUp, componentDidMount, calculateSomeProperty, renderFirstPart, renderSecondPart, render, какие-нибудь геттеры и сеттеры, и всё это лежит прям вперемешку. Я уже не говорю, что чисто теоретически компоненты в render могут приходить абсолютно откуда угодно (так конечно никто не делает, но тем не менее).
Большие компоненты на vue в десятки раз симпатичнее. Во-первых, естественное деление компонента на темплейт, код и стили. Ты всегда легко и четко понимаешь, где что искать. Вдобавок, в коде данные, методы, computed-свойства, вотчеры свойств и методы жизненного цикла очень хорошо разделены, и в них совсем не путаешься.
У меня есть хороший пример на эту тему, я его скину чуть попозже.
Во-вторых, темплейты порой менее мощные, чем jsx, и тебе порой приходится думать, как-то что-то выносить в computed properties или вроде того, и за счет этого код становится проще и понятнее.
Но для более сложных извращений vue всё-таки поддерживает jsx, да.
В-третьих, стили в том же файле, черт, это реально удобно.
Ну и блин, чисто эстетически приятно, что у тебя не html внутри js-а, а нормальный html-like файл с 3 секциями <template>, <script>, <style>.
2) Во вью всё из коробки. Реакт с какого-то момента, кажется, разбили на кучу модулей + не тащат туда лишнюю логику (вроде scoped стилей), что вроде бы должно быть плюсом, но всё равно гораздо удобней как во вью. Тебе не нужно импортировать classnames ради красивого склеивания класснеймов; у тебя из коробки есть вотчеры (обработчики событий на изменение переменных в скоупе вью -- пропсов, стейта и прочего); а ещё если передать в пропсы объект, он будет следить за его свойствами. Это наделяет вью базовыми возможностями mobx, а любой объект автоматически наделяет computed-свойствами и всякими триггерами ререндера, благодаря чему можно создать обычный js-овый объект, напихать в него каких-то свойств, шарящихся между компонентами, методов к ним, и благополучно передать в пропсы всем нужным компонентам. Получится абсолютно тот же самый mobx, только из коробки, и я уже на самом деле не представляю, как писать без таких фич :D