当前位置: 首页 > news >正文

reduxreact-redux

redux

redux组成部分:state,action,reducer,store
store主要职责:
维持应用的state
提供getState()方法获取state
提供dispatch()方法发送action
通过subscribe()来注册监听
通过subscribe()返回值来注销监听
用法:

  • action:必须要有return返回值,返回的是对象{type: ‘xx’, key: value},必须要有type属性
action/index.js组件写action的相关信息
const sendAction = () => { // 名字随意取return {type: 'send_action', // 名字随意取...//剩下的写需要传的参数value: '发送爱心~' // 调用时返回的值}
}
const stopAction = () => { // 名字随意取return {type: 'stop_action', // 名字随意取...//剩下的写需要传的参数value: '停止发送'}
}
module.exports = {sendAction,stopAction,
}
  • reducer:可以写个初始值,在这边判断action的type值
reducer/index.js组件
const initState = {sendValue: '发射信息',stopValue: '停止信息',
} // 定义初始值const reducer = (state = initState, action) {switch(action.type) {case: 'send_action':return {sendValue: action.Value}case: 'stop_action':return {stopValue: action.Value}case: 'add_action':retrun {// 返回的都是新的state,那我随便取个值吧addValue: action.value}default: return state;}
}const loveReducer = (state = initState, action) {switch() {...}}
const ... = (state, action) {}
module.exports = {reducer,loveReducer,...
}
  • store: 需要导入reducer
import { legacy_createStore as createStore } from 'redux';// 导入reducer
import { reducer, xxx } from '../reducer/index.js';// 构建store
export default createStore(reducer)
  • 使用:在需要发送action的页面导入action,store
import React from 'react';
import store from '../../store/index.js';
import { sendAction, stopAction } from '../../action/index.js';export default class Home extends React.Component {handleClick = () => {// 发送action方式有两种:1.发送action组件内的const action = sendAction()store.dispatch(action)// 2.直接store.dispatchstore.dispath({type: 'add_action', // action的type必传// 剩下的可以传值value: 'add_action的传值,这个值会在reducer的action里'})}// 当组件加载完成的时候监听,具体用法还需百度componentDidMount(){store.subscribe(() => {// this.setState({});})}render(){return (<><button onClick="this.handleClick">点击发送action</button></>)}
}

child组件中使用add_action的value值
获取store里的属性值用store.getState()

import React from 'react';
// 需要引入store
import store from '../../store/index.js';
export default class Child extends React.Commponents {render(){return (<div>{ store.getState().addValue }</div>)}
}

react-Redux

react-Redux中两个重要的成员:
1.Provider: 这个组件能够使你整个app都能获取到store中的数据
2.connect: 这个方法能够使组件跟store来进行关联

  • Provider:
    Provider包裹在根组件最外层,使所有的子组件都可以拿到State
    Provider接收store作为props,然后通过context往下传递,这样react中任何组件都可以通过context获取到store

  • connect:
    connect:Provider内部组件如果想要使用到state中的数据,就必须要connect进行一层包裹封装,换一句话来说就是必须要被connect进行加强
    connect就是方便我们组件能够获取到store中的state

react-redux使用:需要结合redux的reducer,store使用

  1. 需要在引入两个子组件的根组件最外层,引入store,绑定store
import React from 'react';
import srore from '../../store/index.js'; // 与上面store/index.js相同
import { Provider } from 'react-redux';
// 引入两个子组件
import ComA from '../xxx/ComA.js';
import ComB from '../xxx/ComB.js';
class Main extends React.Commpont {render(){return(<Provider store={store}><ComA /><ComB /></Provider>)}
}
  1. 在两个子组件中使用connect,一个发送组件一个接收组件
    connect(接收函数,发送函数)(需要使用connect的组件)
ComA组件:发送action组件
import React from 'react';
// 导入connect
import { connect } from 'react-redux';
class ComA extends React.Commponent{addClick = () => {// 底下mapDispatchToProps 函数在组件内就是props,用this.props.xxx可以调用具体的actionthis.props.addAction();}recClick = () => {this.props.recAction();}render() {refturn {<><button onClick={this.addClick}>+</button><button onClick={this.recClick}>-</button></>}}
}const mapDispatchToProps = dispatch => {// 接收dispatch参数// 必须要有return 返回值,返回对象{}, 键值对形式 key: ()=>回调函数return {addAction: () => {dispath({type: 'add_action', // action必须要有type值value: '需要传递的值',})},recAction: () => {dispath({type: 'rec_action', // action必须要有type值value: '需要传递的值',})}}
}
// connect需要导出,第一个函数是接收的,这个组件不需要接收置为null,只需要第二个发送函数,名字随便取
export default connect(null, mapDispatchToProps)(ComA)
reducer/index.js组件
const initState = {count: 0
}
exports.reducer = (state, action) => {switch(action.type){case: 'add_action':return {count: state.count + 1}case: 'rec_action':return {count: state.count - 1}}
}

child组件中接收value:

import React from 'react';// 导入connect
import { connect } from 'react-redux';class ComB extends React.Commponent {render() {return(// 在组件内使用this.props获取值<div>{ this.props.count }</div>)}
}const mapStateToProps = (state) => {// 必须要returnreturn state
}
// 接收组件只需要第一个接收函数,需要导出
export default connect(mapStateToProps)(ComB)
http://www.lryc.cn/news/149201.html

相关文章:

  • go中的并发
  • 开启EMQX的SSL模式及SSL证书生成流程
  • 4 | Java Spark实现 WordCount
  • Redis7安装
  • Nginx vs Tomcat:一个高性能Web服务器和Java应用服务器的对决
  • 终端登录github两种方式
  • 【防火墙】防火墙NAT Server的配置
  • 《算法竞赛·快冲300题》每日一题:“简化农场”
  • 【二等奖方案】大规模金融图数据中异常风险行为模式挖掘赛题「冀科数字」解题思路
  • C# List与HashSet的contains()方法查询速度比较
  • 命令执行漏洞复现攻击:识别威胁并加强安全
  • Keepalived实现服务器的高可用性
  • Python程序化交易接口批量获取数据源码
  • 【强化学习】基本概念
  • 0001__安装electron失败 postinstall: `node install.js`
  • Linux测开常用命令总结
  • xml转化为txt数据的脚本,为yolo提供训练
  • 【H5页面嵌入到小程序或APP中实现手机号点击复制和拨号功能】
  • Kubernetes技术--k8s核心技术 configMap
  • Springboot动态修改日志级别
  • 新手将最简单的springboot部署上tomcat出现的意外问题
  • P1177 【模板】排序(Sort排序)
  • 软件测试(黑盒测试、白盒测试、灰盒测试)
  • 昨天面试的时候被提问到的问题集合。
  • 广电运营商三网融合监控运维方案
  • 数据库锁简析
  • 说说广播流与普通流
  • 内卷的本质和大数据在计量经济学领域的运用思考
  • 毕业设计-摄像头识别二维码
  • 封装动态表单组件