Я вижу , что mapStateToProps
и mapDispatchToProps
функции , которые передаются connect
функции в Redux взять в ownProps
качестве второго аргумента.
[mapStateToProps(state, [ownProps]): stateProps] (Function):
[mapDispatchToProps(dispatch, [ownProps]): dispatchProps] (Object or Function):
Для чего нужен необязательный [ownprops]
аргумент?
Я ищу дополнительный пример, чтобы прояснить ситуацию, поскольку он уже есть в документации Redux
redux
react-redux
там будет код
источник
источник
Ответы:
Если
ownProps
параметр указан, react-redux передаст реквизиты, которые были переданы компоненту, в вашиconnect
функции. Итак, если вы используете такой подключенный компонент:import ConnectedComponent from './containers/ConnectedComponent' <ConnectedComponent value="example" />
ownProps
Внутри вашихmapStateToProps
иmapDispatchToProps
функций будет объект:{ value: 'example' }
И вы можете использовать этот объект, чтобы решить, что возвращать из этих функций.
Например, в компоненте сообщения в блоге:
// BlogPost.js export default function BlogPost (props) { return <div> <h2>{props.title}</h2> <p>{props.content}</p> <button onClick={props.editBlogPost}>Edit</button> </div> }
Вы можете вернуть создателей действий Redux, которые что-то делают в этом конкретном посте:
// BlogPostContainer.js import { bindActionCreators } from 'redux' import { connect } from 'react-redux' import BlogPost from './BlogPost.js' import * as actions from './actions.js' const mapStateToProps = (state, props) => // Get blog post data from the store for this blog post ID. getBlogPostData(state, props.id) const mapDispatchToProps = (dispatch, props) => bindActionCreators({ // Pass the blog post ID to the action creator automatically, so // the wrapped blog post component can simply call `props.editBlogPost()`: editBlogPost: () => actions.editBlogPost(props.id) }, dispatch) const BlogPostContainer = connect(mapStateToProps, mapDispatchToProps)(BlogPost) export default BlogPostContainer
Теперь вы можете использовать этот компонент так:
import BlogPostContainer from './BlogPostContainer.js' <BlogPostContainer id={1} />
источник
ownProps относится к реквизитам, переданным родительским элементом.
Так, например:
Parent.jsx:
Child.jsx:
источник
Ответ goto-bus-stop хорош, но нужно помнить одну вещь: по словам автора redux, Abramov / gaearon, использование ownProps в этих функциях делает их медленнее, потому что они должны повторно связывать создателей действий при изменении свойств.
См. Его комментарий по этой ссылке: https://github.com/reduxjs/redux-devtools/issues/250
источник