Redux 跟 React 并没有关系。你可以用 React、Angular、Ember、jQuery 或甚至原生 JavaScript 来撰写 Redux 应用程序。
Redux 最基本的用途就是 集中管理state,主要的使用方式是: 将 UI 描述成一个 state 的 function,每当 state 更新,执行对应的 action。
优点
修改codepen的范例,简单制作一个姓名清单。
创建 Reducer
Reducer
是一个函式。Redux
中用以保管 state
, 并指定要执行的action
。(范例有载入NODE-UUID CDNs,顺便练习key绑id。)
// 创建资料库
const initialState = [
{
name: "Winnie",
id: uuid.v4()
},
{
name: "Mary",
id: uuid.v4()
},
{
name: "Angel",
id: uuid.v4()
}
];
// reducer(初始资料状态,要对state执行的动作){}
const reducer = (state = initState, action) => {
switch (action.type){
default:
return state
}
}
这里的范例只有设定预设的情况,没有设定其他action,先简单理解就好。
创建 store
store
负责整合所有的 Reducer
。import { createStore } from 'redux'
// 创建 store : 整合reducer
const store = createStore(reducer, initialState);
定义要从 store 中取得的资料
mapStateToProps()
const mapStateToProps = state => {
return {
contacts: state
};
}
contacts
为 key 从 props 流进 component)。连结component
const Contacts = (props) => {
return (
<ul>
{props.contacts.map((contact, id) => (
<div key={id} className="box">
<p>{contact.name}</p>
</div>
))}
</ul>
);
}
帮清单写成一个Component,然後引入App。
import React from 'react'
class App extends React.Component {
render() {
return (
<section className="section">
<h1 className="title">Contacts</h1>
<Contacts
contacts={this.props.contacts}
/>
</section>
);
}
}
传入Contacts的this.props.contacts
就是之後mapStateToProps里回传的contacts
属性。
import { connect } from 'react-redux'
//
const AppContainer = connect(mapStateToProps)(App);
AppContainer接收connect处理好 mapStateToProps, App的结果。
用 Provider 将 store 的资料传进 component
import { connect, Provider } from 'react-redux'
import ReactDOM from 'react-dom'
// 根据需求单将资料流进 component
ReactDOM.render(
<Provider store={store}>
<AppContainer />
</Provider>,
document.getElementById("root")
);
Provider 是一种 react-redux 中的组件,它会
Provider 在最外层并指定了 store 。
Provider 永远都在最外层,也永远都只有一个
为了保持资料来源都是从 Provider 流进内部的 component ,这也是为什麽每个专案中 store 应该都只能有一个。
最後附上 codepen完整程序码
【如内文有误还请不吝指教>< 并感谢阅览至此的各位:D 】
参考资料
---正文结束---
<<: Day 11 ROS Cpp Parameter Server
>>: 通过SafariViewController查询网站 Day22
重要 method onSwiped(ViewHolder, int) 当产生侧滑效果了,会回调此方...
昨天提到了ReLU还有它的一些variant,那接下来要讲的是另外一个更进阶的想法,叫做Maxou...
当我们要在资料表内操作资料时,最常执行的指令就是 Select, Insert, Update, D...
首先来认识常见的错误类型: EvalError- eval() 执行错误 RangeError - ...
这里我们先介绍 gulp-clean-css(压缩css) 与 gulp-uglify(压缩js) ...