React-Redux[下]

简介: React-Redux[下]

React-Redux中中结尾定下了使用react-redux的官方用法是通过provider将store传给App组件,使其下的所有组件都能使用store里面的数据

ReactDOM.render(
//在Provider中使用store属性接收store
    <Provider store={store}>
        <React.StrictMode>
            <App/>
        </React.StrictMode>
    </Provider>
    , document.getElementById('root'));

其本质其实就是使用了一个上下文生产和消费数据,那这么来说的话和我前段时间学过的Context+Provider+Consumer就是一回事

思考:可以不以手写自己封装一个功能类似的组件呢?

小单已经跃跃欲试啦

Step 01.创建文件搭建基本的结构

//context.js
//01.创建上下文需要引入react
import react from 'react'
//0.2创建一个常量保存创建的上下文对象,默认值为空
const storeContext = react.createContext({})
//03.需要在外界使用,所以把它暴露出去
export default storeContext
Step 02.将需要消费storeContext里头保存的数据进行修改

//App.js
import React from 'react';
import ReactDom from 'react-redux'
import storeContext from '../connect/storeContext';
import App from './App';
ReactDOM.render(
//在Provider中使用store属性接收store
    <storeContext.Provider value={store}>
        <React.StrictMode>
            <App/>
        </React.StrictMode>
    </storeContext.Provider>
    , document.getElementById('root'));
Step03. 消费数据

// context.js
//导入依赖包
import React from 'react'
import ReactDom from 'react-dom'
import storeContext from './context';
function connect(mapStateToProps, mapDispatchToProps) {
// 0.2 将传入的storecontext设置为AdvComponent的context
AdvComponent.context=storeContext;
        return AdvComponent;
    return function enhanceComponent(WrappedComponent) {
        class AdvComponent extends React.PureComponent{
            constructor(props,context){
                super(props,context);
                this.state = {
                    storeState : {...mapStateToProps(this.context.getState())}
                }
            }
            componentDidMount() {
                store.subscribe(()=>{
                    this.setState({
                        storeState: {...mapStateToProps(this.context.getState())}
                    })
                })
            }
            componentWillUnmount() {
                store.unsubscribe();
            }
            render() {
                return (<WrappedComponent {...this.props}
                                          {...mapStateToProps(this.context.getState())}
                                          {...mapDispatchToProps(this.context.dispatch)}/>)
            }
        }
    }
}
export default connect;

这样如果是要访问store里面的数据直接通过this.context就可以啦!实现了通过context获取store里头的数据


目录
相关文章
|
1月前
|
存储 JavaScript 前端开发
React中使用redux
【10月更文挑战第15天】
31 3
|
存储 JavaScript 前端开发
【React】redux和React-redux
redux和React-redux
95 0
|
JavaScript 前端开发 API
【React】React——redux
【React】React——redux
107 1
【React】React——redux
|
JavaScript 前端开发 中间件
React(六) —— redux
React(六) —— redux
|
Web App开发 JavaScript 前端开发
React | Redux的使用详解(二)
React | Redux的使用详解(二)
|
存储 缓存 JavaScript
React | Redux的使用详解(一)
React | Redux的使用详解(一)
|
JavaScript 前端开发
什么是redux?如何在react 项目中使用redux?
什么是redux?如何在react 项目中使用redux?
105 0
|
存储 JavaScript 前端开发
React-Redux[上]
React-Redux[上]
77 0
|
存储 JavaScript 前端开发
React-Redux[中]
React-Redux[中]
78 0
|
JavaScript 前端开发 中间件
redux&react-redux(一)
redux&react-redux(一)
redux&react-redux(一)