react-redux @connect的使用 - Kaiqisan

大家好,都吃晚饭了吗?我是Kaiqisan,是一个已经走出社恐的一般生徒,我第一次见识到这个知识是在使用taro的时候看到的,当时觉得奇怪,自己写了一年的js却从来没有见到过这个语法,(但是别的语言似乎很常见吧)于是就查资料,发现这是一个装饰器语法,详细内容在这

本章不详细讲解装饰器的原理,本章讲解具体的使用方法和如何跑动项目

  • 第一步,先安装相应的包
npm i  @babel/plugin-proposal-decorators --save-dev

装饰器是ES7的语法,但是现在没有主流浏览器支持这个特性

刚刚被谷歌暴打了一顿,查了好久才知道不能兼容
在这里插入图片描述

  • 第二步,完成项目配置
// 这个plugins在module里面,然后找到检测js文件的那个模块,填写在相应的plugins里面即可
plugins: [
    ....
    ["@babel/plugin-proposal-decorators", { "legacy": true }
],
  • 第三步,跑项目,开始写代码

  • 第四步,编写代码

找到最外层的标签,填写provider标签( 这样可以让整个app都可以获取store的数据,防止组件一层一层传递state造成代码冗杂和结构复杂)

import { Provider } from 'react-redux' // P是大写的
import store from '../redux/store'
/* index.js主入口文件 */
<Provider store={store}>
    <div className="App">
    </div>
</Provider>

store有一个全局参数 num

/* reducer.js */
const INITIAL_STATE = {
    num: '0000'
}

const reducer = (state = INITIAL_STATE, action) => {
    ....
}

export default reducer
/* 原先写法,使用经典react框架create-react-app */

import React from 'react'

import { connect } from 'react-redux' // 导入connect方法


class Demo extends React.Component {
    constructor(props) {
        super(props)
        this.state = {}
    }

    render() {
        return <>
            <p>值:{this.props.reducer.num}</p>
        </>
    }
}

export default connect(( reducer ) => {
    return {
        reducer
    }
}, null)(Demo)

明显看出,原先的写法并不简介,理解起来非常困难

然后我们改一改代码

import React from 'react'
// import { Link } from 'react-router-dom'

import { connect } from 'react-redux'

@connect(( reducer ) => {
    return {
        reducer
    }
}, (dispatch) => ({}))
class Demo extends React.Component {
    constructor(props) {
        super(props)
        this.state = {}
    }
    
    render() {
        return <>
            <button>点击+1</button>
            <p>值:{this.props.reducer.num}</p>
        </>
    }
}

export default Demo

这样子似乎可以更好理解了呢

原理

核心是利用了装饰器对原先的类进行修改,把store的参数植入类的props里面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaiqisan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值