使用Proxy实现双向绑定:通过Proxy拦截数据读写,在set中更新视图,结合输入事件将视图变化同步回数据,实现数据与视图的实时联动。

JavaScript的Proxy对象可以拦截对象的操作,利用这一特性可以实现数据的双向绑定。核心思路是:当数据变化时自动更新视图,当视图触发输入事件时同步更新数据。
1. 使用Proxy监听数据变化
通过Proxy代理一个对象,可以拦截其属性的读取和赋值操作。在set陷阱中触发视图更新。
const data = {
message: 'Hello'
};
const app = document.getElementById('app');
const proxy = new Proxy(data, {
set(target, key, value) {
target[key] = value;
// 更新视图
updateView();
return true;
},
get(target, key) {
return target[key];
}
});
function updateView() {
app.innerHTML = ``;
}
2. 绑定视图事件处理函数
在视图渲染时绑定输入事件,将用户的输入同步回数据对象。
function handleInput(event) {
proxy.message = event.target.value; // 触发Proxy的set,进而更新视图
}
每次用户输入时,会修改proxy.message,这会再次触发set陷阱,从而重新调用updateView,形成闭环。
立即学习“Java免费学习笔记(深入)”;
3. 实现简单的双向绑定示例
完整例子:一个输入框和一段文本实时同步。
// HTML结构
//
const data = { text: '初始值' };
const view = `
\${data.text}
`;
function onInputChange(value) {
proxyData.text = value;
}
function render() {
app.innerHTML = view.replace(/\$\{data\.text\}/g, proxyData.text);
}
const proxyData = new Proxy(data, {
set(target, prop, value) {
target[prop] = value;
render(); // 数据变化,重新渲染
return true;
}
});
render(); // 初始渲染
基本上就这些。通过Proxy捕获数据变化,结合事件监听更新数据,就能实现轻量的双向绑定。










