热镀锌(redux crateStore connect)
导读:页面发布-分发dispatch(action(:object ,action已被connect(mapStateToProps, mapDispatchToProps (App 映射到组件props reducer里的纯函数执行,拿到action里返回的对象数据,赋值给redux中的Store,reducer文...
页面发布-分发dispatch(action(:object) ,action已被connect(mapStateToProps, mapDispatchToProps)(App)映射到组件props )
reducer里的纯函数执行,拿到action里返回的对象数据 ,赋值给redux中的Store ,reducer文件 与action文件都是返回store所需对象数据 ,两个文件对这个对象处理再次细分了 ,
reducer 纯粹赋值 action 对数据的来源 ,或对数据加以标记等
function createStore(reducer) {
var state;
var listeners = []
function getState() {
return state
}
function subscribe(listener) {
listeners.push(listener)
return function unsubscribe() {
var index = listeners.indexOf(listener)
listeners.splice(index, 1)
}
}
function dispatch(action) {
state = reducer(state, action)
listeners.forEach(listener => listener())
// listeners.forEach(listener => listener.apply(this,action)
/*
*普通观察者应该是在订阅回调函数中处理分发时传的参数 ,这里很巧妙的用了实例化时外部传入的reducer纯函数 ,
*这样 订阅的回调函数 就让reducer来操作了
*而listener订阅回调暂时是对组件的更新 ,subscribe是在connect连接时订阅的
*/
}
dispatch({})
return { dispatch, subscribe, getState }
}
这里是connect用于理解的代码
//connect()是一个将Redux相关的道具注入组件的函数 。
//您可以注入数据和回调,通过调度操作更改数据 。
function connect(mapStateToProps, mapDispatchToProps) {
//它让我们注入组件作为最后一步 ,这样人们就可以使用它作为装饰。
//一般来说你不需要担心 。
return function (WrappedComponent) {
//它返回一个组件
return class extends React.Component {
render() {
return (
//呈现组件
)
}
componentDidMount() {
//在componentDidMount它记得订阅商店 ,这样就不会错过更新
this.unsubscribe = store.subscribe(this.handleChange.bind(this))
}
componentWillUnmount() {
//稍后取消订阅
this.unsubscribe()
}
handleChange() {
//每当存储状态改变时,它就会重新呈现 。
this.forceUpdate()
}
}
}
}
//这不是真正的实现 ,而是一个心智模型 。
//它跳过了从何处获取“存储 ”的问题(答案:将其放在React上下文中)
//它跳过了任何性能优化(real connect()确保我们不会徒劳地重新渲染) 。
//connect()的目的是不必考虑
//订阅应用商店或自己进行性能优化 ,以及
//相反,您可以指定如何基于Redux存储状态获取道具:
const ConnectedCounter = connect(
//给定Redux状态 ,返回道具
state => ({
value: state.counter,
}),
//给定Redux调度 ,返回回调道具
dispatch => ({
onIncrement() {
dispatch({ type: INCREMENT })
}
})
)(Counter)
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!