Я создаю веб-приложение Nuxt.js SSR, и у меня возникает странная проблема.
<div class = "container" @mouseenter = "hovered = true" @mouseleave = "hovered = false">
<transition name = "fade">
<div class = "class1" v-show = "!hovered && isDesktop">blank_1</div>
</transition>
<transition name='scale'>
<div class = "class2" v-show = "hovered || !isDesktop">blank_2</div>
</transition>
</div>
<script>
export default {
data() {
return {
hovered: false
}
},
computed: {
isDesktop() {
if (process.client) {
window.screen.width > 1024 ? return true : return false
}
}
}
}
</script>
<style>
.class1 {
height: 100px;
width: 100px;
background-color: red;
}
.class2 {
height: 100px;
width: 100px;
background-color: blue;
}
</style>
Я объясню это несколькими шагами.
v-show = "!hovered" и установить медиа-запрос на экране мобильного display:none;. Итак, я исправил единственную проблему с рабочим столом, которая у меня была.Но почему это так работает, когда у меня v-show = "!hovered && isDesktop"?
Я предположил, что первая загрузка Nuxt.JS идет на сервер, поэтому isDesktop возвращается как неопределенный, поэтому v-show = "!hovered && isDesktop" превращается в v-show = "!false && undefined". Но тогда почему вторая директива div v-show: v-show = "hovered || !isDesktop" работает нормально, если она должна превратиться в v-show = "false || !undefined", но у меня все еще есть этот div скрыто на рабочем столе и отображается на мобильном телефоне.
P.S. Это мой первый вопрос по StackOverflow, извините, если я плохо стилизовал код, я не понимаю, как это работает. Спасибо за ответы.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Странное поведение, вероятно, исходит из этой строки
window.screen.width > 1024 ? return true : return false
когда это должно быть
return window.screen.width > 1024 ? true : false
Синтаксис неверный. Nuxt даже не скомпилирует его, когда я попробовал. Интересно, почему ваш сервер Nuxt может с этим работать.
Спасибо за ответ, но на самом деле я использую vuex вместо computed returns, а затем я получаю значение переменной isDesktop через vuex getter. Так что ваш ответ не решит проблему. В описании проблемы я просто упрощаю код, чтобы было понятнее, что происходит.
Хотя это не имеет прямого отношения к проблеме,
isDesktop()в настоящее время неявно возвращаетundefined, когдаprocess.clientне соответствует действительности, было бы проще явно вернутьfalse.