Что такое OwnProps в реакции-редукции?
Я читаю API на response-redux и смотрю один из примеров github Redux: приложение Redux todo
В одном из контейнеров FilterLink
есть mapDispatchToProps
(и mapStateToProps
), чтобы принимать два аргумента, один из которых - собственный.
const mapDispatchToProps = (dispatch, ownProps) => ({
onClick: () => {
dispatch(setVisibilityFilter(ownProps.filter))
}
})
В документах API говорится:
"Если ваша функция mapStateToProps объявлена как принимающая два параметра, она будет вызываться с состоянием хранилища в качестве первого параметра, а реквизит передается подключенному компоненту в качестве второго параметра, а также будет повторно вызываться всякий раз, когда подключенный компонент получает новые реквизит, определяемый путем неглубоких сравнений сравнений (второй параметр обычно называется собственными программами по соглашению). "
Я до сих пор не могу полностью понять, что он делает. Может ли кто-нибудь объяснить, что делает ownProps
с другим примером?
Ответы
Ответ 1
ownProps
- это атрибуты, которые передаются при использовании компонента. В простом Реакторе это можно было бы назвать реквизитами.
например, в Footer.js FilterLink используется как:
<FilterLink filter="SHOW_ALL">
All
</FilterLink>
Таким образом, метод mapStateToProps будет вызываться с ownProps
имеющим значение:
{
"filter": "SHOW_ALL",
"children": ...
}
Метод mapStateToProps
используется в компоненте, mapStateToProps
Redux, для объединения явно переданных свойств (ownProps
) с состоянием, управляемым хранилищем Redux, в props
обернутого компонента.
Итак, в вашем связанном примере FilterLink
const mapStateToProps = (state, ownProps) => ({
active: ownProps.filter === state.visibilityFilter
})
компонент активен (this.props.active == true
), если атрибут filter
(например, SHOW_ALL) соответствует состоянию visibiltyFilter
в state
, то есть если он в настоящее время фильтруется этим значением.