原生代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div id="title">标题</div>
<div id="content">内容</div>
<script>
var render = function(state) {
document.getElementById('title').innerHTML = state.title;
document.getElementById('content').innerHTML = state.content;
};
var appReducer = function(state, action) {
if (!state) {
return {
title: '初始化title',
content: '初始化content',
};
}
switch (action.type) {
case 'CHANGE_TITLE':
return {
...state,
title: action.newTitle,
};
default:
return state;
}
};
var createStore = function(reducer) {
var state = null;
var listeners = [];
var dispatch = function(action) {
state = reducer(state, action);
listeners.forEach(listener => listener());
};
dispatch({});
getState = function() {
return state;
};
var subscribe = function(listener) {
listeners.push(listener);
};
return {
subscribe,
dispatch,
getState,
};
};
var store = createStore(appReducer);
store.subscribe(function() {
render(store.getState());
});
store.subscribe(function() {
console.log(store.getState());
});
store.dispatch({
type: 'CHANGE_TITLE',
newTitle: 'this is new title',
});
render(store.getState());
</script>
</body>
</html>