https://redux.js.org/recipes/computing-derived-data описывает, как использовать повторный выбор 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
Есть ли причины предпочитать повторный выбор над подключенным компонентом контейнера? Я не нахожу (m) никаких примеров, обсуждающих вышеупомянутый подход.