<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id = "app"></div>
<script>
//待渲染数据
let appState = {
text:"data",
color:'red'
}
function renderApp(){
let app = document.getElementById('app');
app.innerText = appState.text;
app.style.color = appState.color;
}
function stateChange(state,action){
switch (action.type){
case 'UPDATE_TEXT':
state.text = action.text;
break;
case 'UPDATE_COLOR':
state.color = action.color;
break;
default:break;
}
}
// let action = {
// type:'UPDATE_TEXT',
// text:"change",
// }
// stateChange(appState,action)
// renderApp()
//传入的参数是 需要观察的数据 使得数据发生变化的函数
function Observer(state,stateChange){
//1、定义一个数组存储行为--渲染函数
let listeners = [];
//2、把行为添加进去 subscribe是将要执行的函数装进数组
let subscribe = (listener)=>{
listeners.push(listener);
}
let getState = state;
//分发是让原始数据 调用 改变函数 使得数据发生变化,再调用渲染函数相当于通知
let dispatch = (action)=>{
//修改默认数据
stateChange(state,action);
//遍历数组内部的每一个函数renderApp 依次执行
listeners.forEach((listener)=>listener())
}
return {getState,dispatch,subscribe}
}
const store = Observer(appState,stateChange)
//3、将渲染函数装进去行为的action数组
store.subscribe(()=>renderApp())
let i = 0;
setInterval(()=>{
store.dispatch({type:'UPDATE_TEXT',text:"修改数据"+i++})
},500)
</script>
</body>
</html>
1、观察者模式
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...