【发布时间】:2018-10-02 11:35:36
【问题描述】:
我正在尝试将reselect 集成到我当前的应用程序中,并且一如既往,首先我开始阅读文档,然后如果需要,另一个资源。我无法理解文档的一个特殊部分,也找不到以更清晰的方式解释的资源。现在我来这里是为了得到一些清晰的解释。
所以它在文档中说`
import React from 'react'
import Footer from './Footer'
import AddTodo from '../containers/AddTodo'
import VisibleTodoList from '../containers/VisibleTodoList'
const App = () => (
<div>
<VisibleTodoList listId="1" />
<VisibleTodoList listId="2" />
<VisibleTodoList listId="3" />
</div>
)
将 getVisibleTodos 选择器与多个实例一起使用 VisibleTodoList 容器将无法正确记忆:
import { connect } from 'react-redux'
import { toggleTodo } from '../actions'
import TodoList from '../components/TodoList'
import { getVisibleTodos } from '../selectors'
const mapStateToProps = (state, props) => {
return {
// WARNING: THE FOLLOWING SELECTOR DOES NOT CORRECTLY MEMOIZE
todos: getVisibleTodos(state, props)
}
}
const mapDispatchToProps = (dispatch) => {
return {
onTodoClick: (id) => {
dispatch(toggleTodo(id))
}
}
}
const VisibleTodoList = connect(
mapStateToProps,
mapDispatchToProps
)(TodoList)
export default VisibleTodoList
使用 createSelector 创建的选择器的缓存大小为 1,并且只有 当其参数集与其相同时返回缓存值 上一组参数。如果我们在渲染之间交替
<VisibleTodoList listId="1" />和<VisibleTodoList listId="2" />, 共享选择器将在接收{listId: 1}和{listId: 2}作为它的 props 参数。这将导致论点 每次调用都不同,因此选择器将始终重新计算 返回缓存的值。
注意最后一句话。如果我们传递不同的ids,为什么要返回缓存值,它应该返回不同的值取决于ids?
【问题讨论】:
标签: reactjs redux react-redux reselect