前端框架响应式原理-手写响应式
1. 导读
- 大家都知道前端的三大框架是具有响应式的。但是其实他们内部实现的原理却是不一样的
- 这里就将手写各大前端框架的响应性
demo
1
2
3
4
5
6
7react => 一个函数重写 onChange 和 value
// <input
// value="state.xxx"
// onchange="()=>{ setState(xxx)}"
// />
vue => object.definedProperty => proxy
anguluar => 脏数据 检测所有的数据 拦截
vue
object.definedProperty
用法
object.definedProperty
是js ES6
的API
- 提供了对于对象的拦截处理的能力
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Object.defineProperty(obj, 'foo',{
value:
// 不允许重复定义
configurable:false,
// 不允许迭代
enumerable: fasle,
// 不允许重复赋值
writable: false,
get:
set:
})
#
Object.defineProperties(obj,{
foo:{
value:
...
}
})demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18function convert(obj) {
Object.keys(obj).forEach(key => {
let internalValue = obj[key]
Object.defineProperty(obj, key, {
get() {
console.log(`get${key}:${internalValue}`);
return internalValue;
},
set(newValue) {
console.log(`get${key}:${internalValue}`);
internalValue = newValue
}
})
})
}
const obj = { foo: 123, sads: 2 }
convert(obj)
console.log(obj)
订阅者模式
依赖跟踪
1 | // depend notify:当依赖更改的时候重新执行 |
observe
1 | <script> |
使用
1 | const state = { |
proxy
- 未完待续
React
- 未完待续
Angular
- 未完待续
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LiuYuanhua!
评论