vueweb端响应式布局_vue响应式原理图文详解

Vue最显著的特性之一便是不太引人注意的响应式系统(reactivity system)。模型层(model)只是普通JS对象,修改它则更新视图(view)。这会让状态管理变得非常简单且直观,不过理解它的工作原理以避免一些常见的问题也是很重要的。

本文将详细介绍Vue响应式系统的底层细节。

追踪变化

把一个普通JS对象传给Vue实例的data选项,Vue将遍历此对象所有的属性,并使用Object.defineProperty把这些属性全部转为getter/setter。

Object.defineProperty是仅ES5支持,且无法shim的特性,这也就是为什么Vue不支持IE8浏览器的原因。

用户看不到getter/setter,但是在内部它们让Vue追踪依赖,在属性被访问和修改时通知变化

每个组件实例都有相应的watcher实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的setter被调用时,会通知watcher重新计算,从而致使它关联的组件得以更新。

变化检测

受现代JS的限制(以及废弃 Object.observe),Vue不能检测到对象属性的添加或删除。由于Vue会在初始化实例时对属性执行 getter/setter转化过程,所以属性必须在data对象上存在才能让Vue转换它,这样才能让它是响应的。var vm = new Vue({

data:{

a:1

}

})

// `vm.a` 是响应的</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 本身并不提供专门的响应式布局功能,但是可以使用 CSS 和一些 Vue 的特性来实现 web 响应式布局。以下是一些常用的方法: 1. 使用 CSS 媒体查询:通过在 CSS 中使用 `@media` 查询,根据不同的屏幕尺寸应用不同的样式。例如,可以在不同的屏幕宽度下设置不同的布局和样式。 ```css @media (max-width: 768px) { /* 在小于等于 768px 的屏幕宽度下应用的样式 */ } @media (min-width: 769px) and (max-width: 1024px) { /* 在 769px 到 1024px 之间的屏幕宽度下应用的样式 */ } @media (min-width: 1025px) { /* 在大于等于 1025px 的屏幕宽度下应用的样式 */ } ``` 2. 使用 Vue响应式属性和计算属性:Vue 提供了响应式属性和计算属性,可以根据屏幕尺寸动态改变组件的样式和布局。 ```vue <template> <div :class="containerClass"> <!-- 内容 --> </div> </template> <script> export default { data() { return { screenWidth: window.innerWidth // 监听窗口宽度 } }, computed: { containerClass() { if (this.screenWidth <= 768) { return 'container-small' } else if (this.screenWidth <= 1024) { return 'container-medium' } else { return 'container-large' } } }, mounted() { window.addEventListener('resize', this.handleResize) }, beforeDestroy() { window.removeEventListener('resize', this.handleResize) }, methods: { handleResize() { this.screenWidth = window.innerWidth } } } </script> <style> .container-small { /* 在小于等于 768px 的屏幕宽度下应用的样式 */ } .container-medium { /* 在 769px 到 1024px 之间的屏幕宽度下应用的样式 */ } .container-large { /* 在大于等于 1025px 的屏幕宽度下应用的样式 */ } </style> ``` 这些方法可以根据不同的需求和场景进行调整和扩展,以实现更复杂的响应式布局。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值