本示例修改自 上一章 求和Demo
/* 这是Count的容器组件 */
// 引入 Count 的UI组件
import CountUI from '../../components/Count_Redux'
// 引入 connect 用于连接UI组件与Redux
import { connect } from 'react-redux'
//引入action
import {createIncrementAction,createDecrementAction,createIncrementAsyncAction
} from '../../redux/count_action'// connect创建并返回一个Count的容器组件
export default connect(state => ({ count: state }),dispatch => ({add: num => dispatch(createIncrementAction(num)),sub: num => dispatch(createDecrementAction(num)),asyncAdd: (num, time) => dispatch(createIncrementAsyncAction(num, time)),})
)(CountUI)
mapDispatchToProps 可以写成对象形式
// connect创建并返回一个Count的容器组件
export default connect(state => ({ count: state }),{add: createIncrementAction,sub: createDecrementAction,asyncAdd: createIncrementAsyncAction}
)(CountUI)
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
);// 不需要手动监测了,react-redux 自动监测
// store.subscribe(() => {
// root.render(
//
//
//
// );
// })
Provider 让所有组件都可以得到state数据
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import store from './redux/store'
import { Provider } from 'react-redux';const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(store}>
);
component 整个文件夹被干掉了,Count UI组件整个塞到 容器组件里
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n7sHsFBC-1669801871426)(C:\Users\Administrator\Desktop\学习笔记\react_redux.assets\image-20221130174818771.png)]
import React, { Component } from 'react'
// 引入 connect 用于连接UI组件与Redux
import { connect } from 'react-redux'
//引入action
import {createIncrementAction,createDecrementAction,createIncrementAsyncAction
} from '../../redux/count_action'// 定义UI组件
class Count extends Component {state = {num: 1}add = () => {const { num } = this.statethis.props.add(num)}sub = () => {const { num } = this.statethis.props.sub(num)}oddAdd = () => {const { num } = this.stateconst { count } = this.propsif (count % 2 === 1) {this.props.add(num)}}asyncAdd = () => {const { num } = this.statethis.props.asyncAdd(num, 2000)}render() {const { count } = this.propsreturn (当前求和为:{count}
)}
}// 暴露容器组件
export default connect(state => ({ count: state }),{add: createIncrementAction,sub: createDecrementAction,asyncAdd: createIncrementAsyncAction}
)(Count)
容器组件和UI组件整合一个文件
无需自己给容器组件传递store,给包裹一个即可
使用了 react-redux 后也不用再自己检测redux中状态的改变了,容器组件可以自动完成这个工作
mapDispatchToProps 也可以简单的写成一个对象
一个组件要和redux “打交道” 要经过哪几步?
定义好UI组件—不暴露
引入connect生成一个容器组件,并暴露,写法如下:
connect(state => ({key:value}), //映射状态{key:xxxxxAction} //映射操作状态的方法
)(UI组件)
在UI组件中通过 this.props.xxx 读取和操作状态
上一篇:克洛普:过去11天都没有像样地训练过,队员们都挺过来了 克洛普下过课吗 克洛普不刻意浪费比赛时间
下一篇:沙特联-利雅得新月3-1逆转吉达联合 9分领跑+各项赛事25连胜 吉达联合3-4利雅得新月积分榜 沙特联利雅得新月