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中使 ...
随机推荐
- mouseup模拟drag与click事件冲突
今天要说一个很隐晦的东西,一般可能很难碰到,碰到了可能很难解决.就是当我们自己用mousestart,mousemove,mouseup做自定义拖拽效果的时候,如果这个时候配上click就会引发一个拖 ...
- highcharts中的环形图
环形图如下效果: 代码: that.options = { chart: { type: 'pie', backgroundColor: 'transparent', color: '#fff', / ...
- Redis之过期删除侧率
Redis 中 key 的过期删除策略 内存碎片如何产生 碎片率的意义 如何清理内存碎片 内存淘汰触发的最大内存 有哪些内存淘汰策略 内存淘汰算法 LRU LFU 1.定时删除 2.惰性删除 3.定期 ...
- 终端工具之Tabby
我工作中用的最多的工具之一就是「终端连接工具」了,因为经常和 Linux 服务器打交道,经常在上面跑代码.排查系统问题等等. Windows 系统最常用的就是 Xshell 这款终端工具了,但是它只能 ...
- elasticsearch权限验证(Auth+Transport SSL)
转载:https://knner.wang/2019/11/26/install-elasticsearch-cluster-7-4.html 在新版的Elastic中,基础版(免费)的已经提供了基础 ...
- Blazor 组件库 BootstrapBlazor 中CheckboxList组件介绍
组件介绍 CheckboxList 多选框组控件用于创建多选的复选框组. 他的样子是这样的: 代码也很简单,绑定一个List就行了. <CheckboxList @bind-Value=&quo ...
- java/spring项目打成jar包供第三方引用方案
分类 单独工具类 比如StringUtils 注入类工具类 实现 单独工具类 将项目打jar包 项目结构 开始打包: 在目标项目中pom引用直接使用 注入类工具类 当我们想要利用SpringBoot封 ...
- 【前端】‘opencollective-postinstall‘ 不是内部或外部命令,也不是可运行的程序
问题 'opencollective-postinstall' 不是内部或外部命令,也不是可运行的程序 解决办法 npm install --save opencollective-postinsta ...
- 微软中文输入法带来的一点小坑,导致arcgispro输入中文异常
有同事反映,在Pro中新建要素类时,没办法设定名称为"新建",会自己变成不完整的拼音. 查看了一下,确有此事. 在相同的界面里还有其他输入框,却没有这种情况. 研究了一下,发现是输 ...
- regsvr32.exe使用
regsvr32.exe使用详解: regsvr32.exe是32位系统下使用的DLL注册和反注册工具,使用它必须通过命令行的方式使用,格式是: regsvr32 [/u] [/s] [/n] [ ...