react-redux-轻松搞定-1基础

简介: vuex指针对vue环境redux不止针对react环境 ,其他组件也能用,vue也能用react为了更好的使用封装了个库 react-reduxReact Redux 只针对reactcnpm i -S react-redux

1.前言


vuex指针对vue环境

redux不止针对react环境 ,其他组件也能用,vue也能用

react为了更好的使用封装了个库 react-redux

React Redux 只针对react

cnpm i -S react-redux


2.所有容器组件都可访问 Redux store


手动监听
  1. props形式传入到所有容器组件中

但这太麻烦了,因为必须要用 store 把展示组件包裹一层,仅仅是因为恰好在组件树中渲染了一个容器组件

2.Provider

不必显式地传递它。只需要在渲染根组件时使用即可。

之前的redux写法删了


// redux存储器
import store from "./store"
import { Provider } from 'react-redux'
ReactDOM.render(
  <React.StrictMode>
    <Provider store={store}> <App /></Provider>
  </React.StrictMode>,
  document.getElementById('root')
);



3.基本组件结构


代码


import React, { Component } from 'react';
import {connect} from 'react-redux';
import { Link } from "react-router-dom"
class ComponentTest extends Component {
    render() {
        return (
            <div>
                <h1><Link to="/" >首页 </Link></h1>
                <button onClick={() => {
                }}>
                    修改 counter
                </button>
            </div>
        );
    }
}
// mstp 快捷键, 注意 自动生成的箭头函数 多个() 这里不需要
const mapStateToProps = (state, ownProps) => {
    // 自己查看参数,其实看名字也能看出来
    console.log("mapStateToProps-----------state", state)
    console.log("mapStateToProps-----------ownProps",ownProps)
    // 返回的这个对象,就是我们组件的props
    return {
    }
}
// 把订阅放到属性上
// mdtp快捷键
const mapDispatchToProps = (dispatch, ownProps) => {
        // 返回的这个对象,就是我们组建的props
    return {
    }
}
// connect:和store产生关联
export default connect(mapStateToProps,mapDispatchToProps)(ComponentTest);



4.获取值


render里面


<p>{ this.props.value}</p>

状态转为组件属性

state  ---> props


const mapStateToProps = (state, ownProps) => {
    // 
    console.log("mapStateToProps-----------state", state)
    console.log("mapStateToProps-----------ownProps",ownProps)
    // 返回的这个对象,就是我们组件的props
    return {
         // 把counter存到value里面 
    // 返回的这个对象是组件的props
        value:state.counter
    }
}



5.修改值


render


<button onClick={() => {
          //    之前的监听是一样的
                    this.props.add()
                }}>
                    修改 counter
                </button>

把订阅放到属性上


const mapDispatchToProps = (dispatch, ownProps) => {
        // 返回的这个对象,就是我们组件的props
    // 所以在render 里面  this.props.add() 调用
    return {
        add: () => {
            // 这里边可以调用到 dispatch ,就可以发出 action 进行修改
            // 其他地方拿不到  store
            dispatch({type:"A",value:100})
        }
    }
}



6这段代码的常见问题


注意用快捷键 mstp 或者mdtp生产的箭头函数去掉函数体的()

监听不到状态的改变

错误原因type和store里面actiton不一样

store里面 reducer没有用深拷贝 ,

因为直接修改state在react-redux中监听不到修改

就是store里面的


// 深拷贝 state
            let tempState = JSON.parse(JSON.stringify(state))
            // 修改
            tempState.counter = tempState.counter + action.value
            // 返回修改后的状态
            return tempState




相关文章
|
数据采集 机器学习/深度学习 算法
【机器学习】数据清洗之处理异常点
【机器学习】数据清洗之处理异常点
414 1
|
Java 编译器 API
protobuf万字语法详解
当用protocol buffer编译器来运行.proto文件时,编译器将生成所选择语言的代码,这些代码可以操作在.proto文件中定义的消息类型,包括获取、设置字段值,将消息序列化到一个输出流中,以及从一个输入流中解析消息。
207 0
protobuf万字语法详解
|
12月前
|
前端开发 JavaScript API
React 文件下载组件 File Download
本文介绍了在React中实现文件下载组件的方法,包括使用`a`标签和JavaScript动态生成文件,解决了文件路径、文件类型、大文件下载及文件名乱码等问题,并展示了使用第三方库`file-saver`和生成CSV文件的高级用法。
218 6
|
9月前
|
机器学习/深度学习 大数据 数据管理
一图尽览:AllData数据中台商业版与开源版功能对比
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
8月前
|
数据可视化 关系型数据库 定位技术
全面支持国产部署,阿里云DataV重磅推出空间数据新方案!
全面支持国产部署,阿里云DataV重磅推出空间数据新方案!
|
12月前
|
存储 缓存 算法
C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力
本文探讨了C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力。文章还分析了数据结构的选择与优化、算法设计的优化策略、内存管理和代码优化技巧,并通过实际案例展示了C语言在排序和图遍历算法中的高效实现。
316 2
|
人工智能
[AI Google] 三种新方法利用 Gemini 提高 Google Workspace 的生产力
Workspace 侧边栏中的 Gemini 现在将使用 Gemini 1.5 Pro,新的 Gemini for Workspace 功能即将登陆 Gmail 移动应用,等等。
[AI Google] 三种新方法利用 Gemini 提高 Google Workspace 的生产力
|
数据采集 机器学习/深度学习 算法
聚类算法
【6月更文挑战第6天】聚类算法是无监督学习方法,用于将数据集划分成相似样本的类别。常见的聚类算法有K均值、层次聚类和DBSCAN等。在分析时,涉及数据预处理、选择算法、确定聚类数目、执行聚类及评估结果。层次聚类分为自底向上和自顶向下两种,而K-Means是基于质心的聚类算法。评估指标如轮廓系数可衡量聚类效果。聚类过程包括初始化中心、计算样本与中心距离、分配类别和更新中心,直到收敛。
540 2
|
监控 网络协议 数据可视化
Websocket原理和实践
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
1101 0
Websocket原理和实践
|
Web App开发 存储 JavaScript
【面试题】2023前端vue面试题及答案(一)
【面试题】2023前端vue面试题及答案(一)
293 0