【发布时间】:2018-10-22 02:40:02
【问题描述】:
https://redux.js.org/recipes/computing-derived-data 描述了当组件依赖于作为计算值的属性时,如何使用 reselect createSelector() 来避免不必要的更新。
一种替代方法似乎是将必要的计算转移到一个(希望是)轻量级容器组件中,该组件连接到存储区。在这种情况下,mapStateToProps() 将返回对存储的引用,并且 connect() 不会触发容器组件的更新,除非存储中的相关值已更改:
import { connect } from 'react-redux'
import { toggleTodo } from '../actions'
import TodoList from '../components/TodoList'
const mapStateToProps = state => {
return {
visibilityFilter: state.visibilityFilter,
todos: state.todos,
}
}
const mapDispatchToProps = dispatch => {
return {
onTodoClick: id => {
dispatch(toggleTodo(id))
}
}
}
const connected = connect(
mapStateToProps,
mapDispatchToProps
)
const getVisibleTodos = (todos, filter) => {
switch (filter) {
case 'SHOW_ALL':
return todos
case 'SHOW_COMPLETED':
return todos.filter(t => t.completed)
case 'SHOW_ACTIVE':
return todos.filter(t => !t.completed)
}
}
const VisibleTodoList = connected((props) => {
return <TodoList
todos={getVisibleTodos(props.todos, props.visibilityFilter)}
onTodoClick={props.onTodoClick}
/>
})
export default VisibleTodoList
是否有任何理由更喜欢 reselect 而不是连接的容器组件?我没有找到 (m) 任何讨论上述方法的示例。
【问题讨论】:
标签: reactjs redux components containers reselect