nvue页面不能用v-show而只能用v-if,因其渲染层无dom显隐概念,display:none不生效;css仅支持flex布局,position:fixed等无效;样式仅支持标准css子集,不支持scss、简写及复杂选择器;适用场景为高性能滚动列表、原生组件覆盖等,非所有页面都需切换。

为什么nvue页面不能用v-show,只能用v-if
nvue的渲染层不维护DOM节点的显隐状态,原生引擎里没有“隐藏但保留布局”的概念。一旦元素不可见,它就真被销毁了——所以v-show背后的display: none在nvue里压根不生效。
- 错误写法:
v-show="showFlag"→ 编译无报错,但页面始终显示或始终不显示,行为不可控 - 正确写法:
v-if="showFlag"→ 元素存在即渲染,不存在即彻底卸载 - 性能影响:频繁切换
v-if会触发组件重建,若需高频显隐(比如弹窗),建议配合show属性控制子组件内部逻辑,而非反复销毁父容器
nvue的CSS为什么只认flex,还不能写position: fixed
nvue走的是Weex原生排版引擎,底层没有浏览器的盒模型和定位系统,所有布局必须靠flex-direction、justify-content等flex属性推演,position系列(包括absolute、fixed)直接被忽略。
- 常见错误:
.header { position: fixed; top: 0; }→ 在nvue中完全无效,元素仍随文档流滚动 - 替代方案:用
sticky(仅支持部分组件如list的header)、或把需要吸顶的内容塞进scroll-view的scroll-y区域 +ref手动监听滚动位置做动态样式切换 - 注意:
width: 100%也失效,得用width: 750rpx或flex: 1撑满
nvue页面里字体图标、SCSS、背景简写为什么全报错
nvue的样式解析器是精简过的,只支持CSS标准的子集,且不经过Webpack预处理流程,所有“便利语法”都会被直接丢弃。
-
background: red→ 报错,必须拆成background-color: red -
border: 1px solid #ccc→ 报错,得写三行:border-width、border-style、border-color - SCSS/Less文件无法导入,
@import只支持.css后缀,且仅限class选择器(不支持.a .b、#id、.a.b) - 字体图标必须用
weex方式加载:先在manifest.json里配置字体路径,再用text标签+font-family调用,view里放图标会失效
什么时候该切nvue,什么时候死守.vue
不是“越原生越好”,而是看瓶颈在哪。nvue强在原生组件直出和滚动性能,弱在开发约束和调试体验;vue胜在灵活、生态全、调试顺,但WebView一卡就是整页卡顿。
- 必须上nvue的场景:
recycle-list长列表、左右滑动新闻流(swiper+区域滚动)、聊天输入框要改软键盘右下角文字为“发送”、地图/视频组件上要盖按钮(解决层级覆盖问题) - 坚持用.vue的场景:
canvas绘图、需要media query响应横竖屏、用到第三方UI库(如uView)、页面含大量表单校验和动态交互逻辑 - 混搭很常见:首页nvue保流畅,二级页.vue保开发效率,通过
uni.navigateTo跳转即可,路由配置和data传递方式完全一致
text包裹文字。习惯之前,多看hello uni-app里的nvue示例,比查文档更快。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!









