mapStateToPropsおよびmapDispatchToPropsでのownProps引数の使用は何ですか?


95

Redux の関数に渡されるmapStateToPropsand mapDispatchToProps関数が2番目の引数として使用されることがわかります。connectownProps

[mapStateToProps(state, [ownProps]): stateProps] (Function):

[mapDispatchToProps(dispatch, [ownProps]): dispatchProps] (Object or Function):

オプションの[ownprops]引数は何ですか?

Reduxのドキュメントにすでに1 つあるので、わかりやすくするために追加の例を探しています


もっと具体的に教えてください。あなたがリンクしているドキュメンテーションのその議論の説明について何が不明確ですか?
jonrsharpe 2016

私は、議論が使用された追加の実用的な例を探していました。
16

1
次に、質問を編集してそれを明確にできますか?
jonrsharpe 2016

1
@jonrsharpe react-redux docsは、それが何であるかを言わず、それが存在するだけで、ownPropsと呼ばれ、関数のアリティが、渡されるかどうかではなく、渡されるかどうかを決定します。
deb0ch

@ deb0ch 18か月前は何と言ったのかわかりませんが、現時点では「接続されたコンポーネントに渡された小道具」と表示されています。いずれにせよ、OPはその後、質問を編集し、回答を受け取り、受け入れました。
jonrsharpe

回答:


110

ownPropsパラメータが指定されている場合、react-reduxはコンポーネントに渡されたプロップをconnect関数に渡します。したがって、次のような接続コンポーネントを使用する場合:

import ConnectedComponent from './containers/ConnectedComponent'

<ConnectedComponent
  value="example"
/>

ownPropsあなたのmapStateToPropsand 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} />

11
注-defaultPropsはownPropsに含まれていません
Mark Swardstrom '14

13

ownPropsは、親から受け継がれた小道具を指します。

したがって、たとえば:

Parent.jsx:

...
<Child prop1={someValue} />
...

Child.jsx:

class Child extends Component {
  props: {
    prop1: string,
    prop2: string,
  };
...
}

const mapStateToProps = (state, ownProps) => {
  const prop1 = ownProps.prop1;
  const tmp = state.apiData[prop1]; // some process on the value of prop1
  return {
    prop2: tmp
  };
};

8

goto-bus-stopの答えは良いですが、覚えておくべきことの1つは、reduxの作者であるAbramov / gaearonによると、これらの関数でownPropsを使用すると、プロップが変更されたときにアクション作成者を再バインドする必要があるため、処理が遅くなるということです。

このリンクで彼のコメントを参照してください:https : //github.com/reduxjs/redux-devtools/issues/250

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.