1.connect方法的作用

(1)组件Todolist和store做连接
(2)connect方法使得UI组件变成了容器组件(包含了业务逻辑和数据状态管理)
(3)connect使得组件和store的数据同步关联,connect: store的state数据一变,组件的state会跟着变

2.connect方法的使用

const TodoList = (props) => {...}
const mapStateToProps = (state) => {...}
const mapDispatchToProps = (dispatch) => {...}
export default connect(mapStateToProps, mapDispatchToProps)(TodoList)

(1) mapStateToProps:store和组件props的关系

const mapStateToProps = (state) => {return {inputValue: state.inputValue,list: state.list}
}

(2) mapDispatchToProps:props 如何对store做修改,和store.dispatch相关联

const mapDispatchToProps = (dispatch) => {return{changeInputValue(e){console.log(e.target.value)const action = getChangeInputAction(e.target.value)dispatch(action)//action被dispatch只是dispatch到store,store把action转发给reducer},handleBtnClick(){const action = getBtnClickAction()dispatch(action)},handleDelete(index){const action = getHandleDeleteAction(index)dispatch(action)}}}

(3)在组件里使用mapStateToProps与mapDispatchToProps:
从props对象里解构赋值得到

const TodoList = (props) =>{const {inputValue,list, changeInputValue, handleBtnClick, handleDelete} = props//优化精简return(<div><div><input value={inputValue} onChange={changeInputValue}/><button onClick={handleBtnClick}>tijiao</button></div><ul>{list.map((item,index) => {return <li onClick={()=>{handleDelete(index)}} key = {index} >{item}</li>})}</ul></div>)
}

3.一个前端业务handleBtnClick实现的流程

TodoList组件jsx代码中触发handleBtnClick会创建action,传给store,store又进一步传给reducer,reducer进行数据处理返回给store,此时state更新完成,实现handleBtnClick的列表新增功能

----actionCreators.js

import {CHANGE_INPUT_VALUE, ADD_ITEM, DELETE_ITEM} from "./actionTypes";export const getChangeInputAction = (value) => ({type : CHANGE_INPUT_VALUE,value
})export const getBtnClickAction = () =>({type: ADD_ITEM
})export const getHandleDeleteAction = (index)=> ({type : DELETE_ITEM,index
})

------reducer.js

import {CHANGE_INPUT_VALUE, ADD_ITEM, DELETE_ITEM} from "./actionTypes";const defaultState = {inputValue : '123',list : []
}export default (state = defaultState, action) => {if(action.type === CHANGE_INPUT_VALUE){const newState = JSON.parse(JSON.stringify(state))newState.inputValue = action.valuereturn newState}if(action.type === ADD_ITEM){const newState = JSON.parse(JSON.stringify(state))newState.list.push(newState.inputValue)newState.inputValue = ''return newState}if(action.type === DELETE_ITEM){const newState = JSON.parse(JSON.stringify(state))newState.list.splice(action.index,1)return newState}return state
}

React-connect用法相关推荐

  1. 常被忽略的React Children用法

    前言 在使用React组件时,经常用到props和Children传递数据给子组件,其中最常用的是:父组件传递元素给子组件,子组件用Children来渲染,但是Children还有一些其他的用法,下面 ...

  2. react connect

    connect([mapStateToProps], [mapDispatchToProps], [mergeProps],[options])连接 React 组件与 Redux store.连接操 ...

  3. 【重点】React.Component用法

    组件(Components)允许您将UI拆分为独立的可重用的部分,并单独的考虑每个部分. 总览 React.Component是一个抽象基类.这意味着直接引用React.Component是毫无意义的 ...

  4. react @connect

    import React from 'react'; import { connect } from 'react-redux' import {add_A,rem_R,addAsync} from ...

  5. 24 React.createRef()用法细节分析

    通过React.createRef → ref对象 通过元素的ref属性可以附加到React元素上 一般通过构造器中给this的属性赋值一个ref,方便整个组件使用 ref只要传递到react元素中, ...

  6. dojo初解和dojo.connect用法(转)

    最近在学习arcgis javascript api,javascript api是基于Dojo,所以先熟悉一下Dojo. DOJO常用的: 1,通过dojo.require以类似C编程中#inclu ...

  7. React—Promise用法

    Promise是什么? 从用途上来说: (1)promise主要用于异步计算. (2)可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果. (3)可以在对象之间传递和操作promise,帮助 ...

  8. 要掌握的异步connect 用法

    在 socket 是阻塞模式下 connect 函数会一直到有明确的结果才会返回(或连接成功或连接失败),如果服务器地址"较远",连接速度比较慢,connect 函数在连接过程中可 ...

  9. React ref用法

    React ref 官方文档 1.介绍 Refs 提供了一种方式,允许我们访问 DOM 节点或在 render 方法中创建的 React 元素. DOM 节点:就是平常所说的能在页面中直接获取到的原生 ...

  10. 小技巧——yarn 报错 : error An unexpected error occurred: “https://registry.npmjs.org/react: connect...

    原因:请求资源连接超时 解决:换源 npm config set registry https://registry.npm.taobao.org

最新文章

  1. 8086汇编语言精华笔记总结~
  2. thinkphp 模型的创建
  3. 怎么用spss做冗余分析_用SPSS进行医学统计信度分析——【杏花开医学统计】
  4. python 用matplotlib.pyplot画(绘制)图表时中文显示不出来怎么办?
  5. 程序设计和c语言ppt,程序设计和C语言.ppt
  6. Hive分析函数--row_number 的用法
  7. Android 常见adb命令
  8. 靠社交和游戏两张牌,腾讯还能活多久? | 畅言
  9. LeetCode 求解电话号码组合(分治法求解)
  10. excel2010文件转换为 dbf 格式文件
  11. C语言 段错误Segmentation Fault
  12. linux bzip2压缩文件,linux bzip2命令压缩或解压缩bzip2文件
  13. 韦根协议W26|W34通讯CPU卡读头HX-W26CPU在门禁梯控设备集成安装注意事项
  14. linux内核手写板驱动,【Linux系统编程应用】 Linux Input子系统(一)
  15. linux md5sum 文件夹,每天一个 Linux 命令(63):cksum、md5sum、sha1sum命令
  16. h5 video标签
  17. 美国卡尔顿学院计算机专业怎么样,美国顶尖学院卡尔顿学院
  18. 《如何阅读一本书》完整版读书笔记
  19. 大屏布局css,前端大屏项目的屏幕适配方案
  20. ip6plus电池测试软件,超雪维修教程(七):iphone6/6 plus更换电池详细图文步骤

热门文章

  1. KlayGE中的字体
  2. java 车辆限行查询功能代码
  3. 物理学家:用数学理论证明人工智能无法超越人类智慧
  4. 如何将杂乱无章的txt文件中的指定内容读取到excel中
  5. Java NIO学习笔记三------Chanel的四种实现篇
  6. macos安装joy工具
  7. 图像_camera_基础知识_物理组成_模组组成
  8. 全网最好用的网站导航,都在这里了
  9. java web系统设计思路_JavaWeb的项目设计思路
  10. 【第183期】网友简历分析:转行没有经验,如何过HR这关?