新建目录结构
考虑这里是学习redux,遂将后边的命名都取为redux,感觉这样子中心思想明确一些
├── mock
| ├── redux.html
| └── redux.js
文件内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="title"></div>
<div id="content"></div>
<script src="redux.js"></script>
</body>
</html>
- redux.js 内容
- 实现思路:
- 假设我们有一个数据对象(APPState)
- 我们有一个渲染内容的方法(renderApp)
- 还有两个渲染具体内容的方法(renderTitle, renderContent)
- 两个action(UPDATE_CONTENT_TEXT, UPDATE_TITLE_COLOR)
- 一个派发事件的方法(dispatch)
- 代码的是思路如下,页面加载以后我们第一次渲染页面,然后在三秒后更新页面数据
let appState = {
title: {
color: 'red',
text: '标题'
},
content: {
color: 'green',
text: '内容'
}
}
function renderApp (appState) {
renderTitle(appState.title)
renderContent(appState.content)
}
function renderTitle (state) {
let el = document.querySelector('#title')
el.innerHTML = state.text
el.style.color = state.color
}
function renderContent (state) {
let el = document.querySelector('#content')
el.innerHTML = state.text
el.style.color = state.color
}
const UPDATE_TITLE_COLOR = 'UPDATE_TITLE_COLOR'
const UPDATE_CONTENT_TEXT = 'UPDATE_CONTENT_TEXT'
function dispatch (action) {
switch (action.type) {
case 'UPDATE_TITLE_COLOR':
appState.title.color = action.color
break;
case 'UPDATE_CONTENT_TEXT':
appState.content.text = action.text
break;
default:
break;
}
}
renderApp(appState)
setTimeout(() => {
dispatch({type: 'UPDATE_TITLE_COLOR', color: 'orange'})
dispatch({type: 'UPDATE_CONTENT_TEXT', text: '新内容'})
renderApp(appState)
}, 3000)
总结
以上是简单的代码雏形,我们到了这里,搭起了简单的代码框架,接下来的几张,将继续完成整个redux库的编写