- 其中有一个应用就是这个,缓存代理,我理解到时候需要进行两张表的对比的时候,如果发现一致,那么就复用,
- 用代理模式实现观察者模式
- 可以利用代理模式包装防抖和节流。
事件原理
- 哪里用到了代理,为什么不用原生的事件捕获那一套:兼容浏览器
- 17 之前 React 事件都是绑定在 document 上。
- 由于不是绑定在真实的 DOM 上,所以 React 需要模拟一套事件流:事件捕获-> 事件源 -> 事件冒泡,
- 也就 是说,所有的event 以及阻止冒泡事件其实都是模拟出来的。
- 流程:一开始是react将所有的事件都分类绑定到document (模拟捕获冒泡阶段):
- 为什么一定要分类绑定:由于react的事件和事件源,是自己合成的,所以需要对不同事件进行分类处理(事件合成)。
vue3Proxy响应式
-
var target = { name: "scx", age: 18 } // handler 是一个对象 const handler = { set(target, prop, value) { let result = Reflect.set(target, prop, value) console.log("设置的操作" + result) return true; }, get(target, value) { let result = Reflect.get(target, value) console.log("获取的的操作" + result) } } let proxy = new Proxy(target, handler); proxy.coure = "java" console.log(proxy)
事件合成系统
//react
export default function Index(){
const handleClick = () => {}
const handleChange =() => {}
return <div >
<input onChange={ handleChange } />
<button onClick={ handleClick } >点击</button>
</div>
}
//react实际绑定的点在document;
{
onClick: ['click'],
onChange: ['blur', 'change', 'click', 'focus', 'input', 'keydown', 'keyup', 'selectionchange']
}
转get请求
源文件
async function fetch(url, object) {
await fetchHelper(url, object)
}
const fetchHelper = (url, object) => {
const {
method,
body
} = object;
//适配代理get请求
if (method.toLowerCase() === "get") {
fetch.post(url, {
method: 'post',
body: body ?? "",
})
}
}
fetch('https://example.com/', {
method: 'get',
body: 'no-cors',
}).then((value) => value)