UI 的呈现, 不带有任何业务逻辑this.state 这个变量)this.props )提供Redux 的 APIUI 的呈现Redux 的 APIimport React from 'react'
import ReactDOM from 'react-dom'
import {Provider} from 'react-redux'
import store from './store'
import App from './App'
const rootElement = document.getElementById('root')
ReactDOM.render(
,
rootElement
)
import {connect} from 'react-redux'
import {increment, decrement, reset} from './actionCreators' // const Counter = ...
const mapStateToProps = (state /*, ownProps*/) => {
return {
counter: state.counter
}
}
const mapDispatchToProps = {increment, decrement, reset}
export default connect(
mapStateToProps,
mapDispatchToProps
)(Counter)
connect 是 HOC, 高阶组件Provider 组件, 可以让容器组件拿到 state, 使用了 contextHOC 不仅仅是一个方法, 确切说应该是一个组件工厂, 获取低阶组件, 生成高阶组件。
props// Child.js
// 高阶函数
function Control(wrappedComponent) {
return class MyControl extends React.Component {
render() {
if (!this.props.data) {
return loading...
}
return
}
}
}
class MyComponent extends React.Component {
render() {
return {this.props.data}
}
}
// 高阶组件
export default Control(MyComponent);
// Parent.js
import MyControlComponent from "./Child"
// 在父级传入 data 是 null 的时候, 这一块儿就只会显示 loading...
// 不会显示组件的具体内容, 如果 data 不为 null, 就显示真实组件信息
import {persistStore, persistReducer} from 'redux-persist';
import storage from 'redux-persist/lib/storage';
import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2';
const persistConfig = {
key: 'kerwin', storage: storage,
// localStorage: import storage from 'redux-persist/lib/storage'
// sessionStorage: import storageSession from 'redux-persist/lib/storage/session'
stateReconciler: autoMergeLevel2
// 控制在本地存储中, 新老状态怎么合并, 覆盖?或者合并?
};
// 改造 reducer
const myPersistReducer = persistReducer(persistConfig, reducer)
// 改造 store
export const persistor = persistStore(store)
// 改造根组件
import {persistor} from './Store'
import {PersistGate} from 'redux-persist/lib/integration/react';
...