react 计算衍生数据
import React from 'react'
import { connect } from 'react-redux'
import TodoList from '../components/TodoList'
import {toggleTodo,VisibilityFilters} from '../actions/index'
import { createSelector } from 'reselect'
const getVisibleTodos = (todos,filter)=>{
switch (filter) {
case 'SHOW_ALL':
return todos
break;
case 'SHOW_COMPLETED':
return todos.filter((todo)=>todo.completed)
break;
case 'SHOW_ACTIVE':
return todos.filter(t=>!t.completed)
break;
default:
throw new Error('Unknown filter: ' + filter)
}
}
const mapStateToProps = (state, ownProps) => {
console.log(state)
return {
todos: getVisibleTodos(state.todos,state.visibilityFilter)
}
}
const mapDispatchToProps = (dispatch, ownProps) => {
return {
toggleTodo: (id) => {
dispatch(toggleTodo(id))
}
}
}
export default connect(mapStateToProps,mapDispatchToProps)(TodoList)
从上面的例子可以看出每次组件更新时 todos列表都会被从新计算,如果 state tree 非常大,或者计算量非常大,每次更新都重新计算可能会带来性能问题。Reselect 能帮你省去这些没必要的重新计算。
import React from 'react'
import { connect } from 'react-redux'
import TodoList from '../components/TodoList'
import {toggleTodo,VisibilityFilters} from '../actions/index'
import { createSelector } from 'reselect'
const getTodos = (state)=>state.todos;
const visibilityFilter = (state)=>state.visibilityFilter //计算衍生数据
createSelector接受二个参数 第一个参数为input-select 意思是当那些状态变更时才会从新计算todos列表 是一个数组函数。
第二个参数是一个函数 参数是:将前一个参数的返回值作为参数
const getVisibleTodos = createSelector(
[getTodos,visibilityFilter],(todos,filter)=>{
switch (filter) {
case 'SHOW_ALL':
return todos
break;
case 'SHOW_COMPLETED':
return todos.filter((todo)=>todo.completed)
break;
case 'SHOW_ACTIVE':
return todos.filter(t=>!t.completed)
break;
default:
throw new Error('Unknown filter: ' + filter)
}
}) const mapStateToProps = (state, ownProps) => {
console.log(state)
return {
// todos: getVisibleTodos(state.todos,state.visibilityFilter)
todos:getVisibleTodos(state)
}
}
const mapDispatchToProps = (dispatch, ownProps) => {
return {
toggleTodo: (id) => {
dispatch(toggleTodo(id))
}
}
}
export default connect(mapStateToProps,mapDispatchToProps)(TodoList)
react 计算衍生数据的更多相关文章
- [译]学习IPython进行交互式计算和数据可视化(三)
		第二章 在本章中,我们将详细学习IPython相对以Python控制台带来的多种改进.特别的,我们将会进行下面的几个任务: 从IPython中使用系统shell以在shell和Python之间进行强大 ... 
- [译]学习IPython进行交互式计算和数据可视化(一)
		--学习IPython进行交互式Python编程.高性能数字计算和数据可视化 作者:Cyrille Rossant 译者:Tacey Wong 注:仅为个人翻译及学习,多有谬处,E文尚可的推荐阅读英文 ... 
- casio计算器计算统计数据
		http://blog.csdn.net/pipisorry/article/details/50257319 使用casio计算器计算输入数据均值.标准差和相关系数的方法,lz使用casio fx8 ... 
- react之传递数据的几种方式props传值、路由传值、状态提升、redux、context
		react之传递数据的几种方式 1.父子传值 父传值:<子的标签 value={'aaa'} index={'bbb'}></子的标签> 子接值:<li key={thi ... 
- 【云栖大会】阿里巴巴集团CTO张建锋:用计算和数据去改变整个世界
		摘要: 当浩瀚的数字化信息能够联网在线,在万物互联网的新世界中,所有东西都可能有感知.变智能,想象一下电表.冰箱.心电图监测仪等设备的信息都能数字化并联网,从城市管理到个人生活,都会迎来翻天覆地的变化 ... 
- 使用spark 计算netflow数据初探
		spark是一个高性能的并发的计算平台,而netflow是一种一般来说数量级很大的数据.本文记录初步使用spark 计算netflow数据的大致过程. 本文包括以下过程: 1. spark环境的搭建 ... 
- 哪种方式更适合在React中获取数据?
		作者:Dmitri Pavlutin 译者:小维FE 原文:dmitripavlutin.com 国外文章,笔者采用意译的方式,以保证文章的可读性. 当执行像数据获取这样的I/O操作时,你必须发起获取 ... 
- 如何利用Apifox通过签名计算及数据加解密进行用户认证接口测试?
		用户注册场景:输入签名数据signature,appId,13位时间戳timestamp,6位随机数nonce,merchantId(非必填,本次不填)的请求参数发送给服务器,服务器返回响应数值后,校 ... 
- JS的toFixed方法设置小数点位数后再进行计算,数据出错问题
		这个应该算作失真,或者也不算.情况就是用了toFixed后再进行相关计算,得不到预期的结果 具体看例子 比如想动态计算百分比,保留一位小数如94.4%这样子 var blobTo = 409600; ... 
- [译]学习IPython进行交互式计算和数据可视化(七)
		第六章:定制IPython 对于高级用户,IPython可以进行定制和扩展.在本章结束之后,你将会知道: 怎样创建和使用自定义配置文件 怎样为高级功能进行IPython扩展 怎样在notebook中使 ... 
随机推荐
- 20.Kubernetes可视化界面kubesphere
			Kubernetes可视化界面kubesphere 前言 Kubernetes也提供了默认的dashboard页面,但是功能不是很强大,这里就不使用了 而是采用Kubesphere大桶全部的devop ... 
- 5.Kubeadm和二进制方式对比
			Kubeadm方式搭建K8S集群 安装虚拟机,在虚拟机安装Linux操作系统[3台虚拟机] 对操作系统初始化操作 所有节点安装Docker.kubeadm.kubelet.kubectl[包含mast ... 
- J2eefast页面调试状态下自动进入debugger断点
			将fastJS.min.js 替换为 fastJs.js 将所使用到的模块的min.js 替换为js文件 
- 🥳重磅更新!Fluent Editor 开源富文本支持 LaTeX 可编辑公式啦~
			你好,我是 Kagol,个人公众号:前端开源星球. Fluent Editor 是一个基于 Quill 2.0 的富文本编辑器,在 Quill 基础上扩展了丰富的模块和格式,框架无关.功能强大.开箱即 ... 
- MoD:轻量化、高效、强大的新型卷积结构 | ACCV'24
			来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: CNN Mixture-of-Depths 论文地址:https://arxiv.org/abs/2409.17016 创新点 提出新的卷积轻 ... 
- .NET斗鱼直播弹幕客户端(上)
			现在直播平台由于弹幕的存在,主播与观众可以更轻松地进行互动,非常受年轻群众的欢迎.斗鱼TV就是一款非常流行的直播平台,弹幕更是非常火爆.看到有不少主播接入弹幕语音播报器.弹幕点歌等模块,这都需要首先连 ... 
- Flink 实战之 Real-Time DateHistogram
			系列文章 Flink 实战之 Real-Time DateHistogram Flink 实战之从 Kafka 到 ES DateHistogram 用于根据日期或时间数据进行分桶聚合统计.它允许你将 ... 
- [不得不知道系列]Java面试你不得不知道的基础知识一
			当今世界上使用最广泛的编程语言之一是Java.Java是通用的高级编程语言.核心java是java编程技术概念的基础,该术语由sun Microsystems用来描述Java的标准版本(JSE).核心 ... 
- Java中的Servlet基本概述
			1 Servlet基本生命周期 一个Servlet是HttpServlet的子类,由支持Servlet的服务器完成该子类的对象初始化的工作.当有多个客户端请求同一个Servlet时候,servlet引 ... 
- Phpstorm之快捷键
			常用快捷键 1.ctrl+alt+s 快速打开setting系统设置 2.CTRL+/ 单行注释/取消注释 CTRL+SHIFT+/ 块状注释/取消块状注释 3.方法体上面打入'/**' 再按回车键 ... 
