ownProps
のmapStateToProps
に基づいて、再選択を使ってメモを使ってセレクタを作成したいと思います。reduxでreselectを使用してownPropsを取得するにはどうすればよいですか?
答えて
react-reduxで提供されるconnect
メソッドを使用してセレクタをコンポーネントに接続し、コンポーネントprops(ownProps)をセレクタの第2引数として渡します。
container.js
import { connect } from 'react-redux';
import { getVisibleTodos } from './selectors';
...
const mapStateToProps = (state, props) => {
return {
todos: getVisibleTodos(state, props),
};
};
const VisibleTodoList = connect(
mapStateToProps,
)(TodoList);
export default VisibleTodoList;
次に、あなたのセレクタにそれらの小道具にアクセスすることができます
selectors.js
import { createSelector } from 'reselect';
const getVisibilityFilter = (state, props) =>
state.todoLists[props.listId].visibilityFilter;
const getTodos = (state, props) =>
state.todoLists[props.listId].todos;
const getVisibleTodos = createSelector(
...
);
export default getVisibleTodos;
Howeve r、これはではありません。は、小道具を渡しているコンポーネントのインスタンスが複数ある場合は正しくメモします。その場合、セレクタは毎回異なる
props
引数を受け取るため、キャッシュされた値を返す代わりに常に再計算されます。
メモ化を保持小道具とに通過させながら複数のコンポーネントを横切ってセレクタを共有するために、コンポーネントの各インスタンスは、セレクタの独自のプライベートコピーが必要です。
これを行うには、呼び出されるたびにセレクタの新しいコピーを返す関数を作成します。
selectors.js
import { createSelector } from 'reselect';
const getVisibilityFilter = (state, props) =>
state.todoLists[props.listId].visibilityFilter;
const getTodos = (state, props) =>
state.todoLists[props.listId].todos;
const makeGetVisibleTodos =() => {
return createSelector(
...
);
}
export default makeGetVisibleTodos;
mapStateToProps
引数が戻りを代わりにオブジェクトの機能を接続するために供給される場合、容器のインスタンスごとに個別mapStateToProps
関数を作成するために使用されます。念頭に置いて
、新しいgetVisibleTodos
セレクタを作成する機能makeMapStateToProps
を作成し、新しいセレクタへの排他的アクセス権を持っているmapStateToProps
機能を返すことができます。VisibleTodosList
の
import { connect } from 'react-redux';
import { makeGetVisibleTodos } from './selectors';
...
const makeMapStateToProps =() => {
const getVisibleTodos = makeGetVisibleTodos();
const mapStateToProps = (state, props) => {
return {
todos: getVisibleTodos(state, props),
};
};
return mapStateToProps;
};
const VisibleTodoList = connect(
makeMapStateToProps,
)(TodoList);
export default VisibleTodoList;
今すぐ各インスタンスをコンテナはgetVisibleTodos
セレクタを持つ独自のmapStateToProps
関数を取得します。 Memoizationは、コンテナのレンダリング順序に関係なく正しく機能するようになりました。私はmakeGetVisibleTodos(にパラメータを追加したい場合はどのような):
- 1. ember-dataを使用してRESTデータを取得/取得するにはどうすればよいですか?
- 2. SDK /プログラムを使用してiPhoneでAppIDを取得するにはどうすればよいですか?
- 3. C#を使用してActive DirectoryでschemaNamingMasterを取得するにはどうすればよいですか?
- 4. JavaでOIDを使用してハッシュアルゴリズム名を取得するにはどうすればよいですか?
- 5. テキストクエリを使用してAndroidで場所を取得するにはどうすればよいですか?
- 6. Javaで再帰を使用してgoldenRatioを取得するにはどうすればよいですか?
- 7. ループを使用してテキストフィールドで値を取得するにはどうすればよいですか?
- 8. jQueryを使用してJavaScriptでクラスベースのオブジェクトを取得するにはどうすればよいですか?
- 9. JSONを使用してアンドロイドのウェブサイトでデータを取得するにはどうすればよいですか?
- 10. psycopg2を使用してポストグルでテーブルを取得するにはどうすればよいですか?
- 11. UISplitViewControllerを使用して詳細ビューコントローラでマスタビューコントローラを取得するにはどうすればよいですか?
- 12. プロバイダでguiceを使用してコンテキストを取得するにはどうすればよいですか?
- 13. Matlabでハンドルを使用してオブジェクトを取得するにはどうすればよいですか?
- 14. spring mvcを使用してインターセプターでプリンシパルを取得するにはどうすればよいですか?
- 15. PHPを使用してMySQLで検索インデックスを取得するにはどうすればよいですか?
- 16. JavaScriptを使用してmaps.google.comでズームレベルを取得するにはどうすればよいですか?
- 17. AndroidスタジオでRobotiumを使用してコードカバレッジを取得するにはどうすればよいですか?
- 18. reduxで「サブアプリケーション」を構成するにはどうすればよいですか?
- 19. getElemetByNameを使用してクリックしたボタン名を取得するにはどうすればよいですか?
- 20. cross_val_scoreを使用してGridSearchからbest_estimatorパラメータを取得するにはどうすればよいですか?
- 21. Linqを使用してViewData.ModelStateから例外を取得するにはどうすればよいですか?
- 22. PHPを使用してmySQLから値NULLを取得するにはどうすればよいですか?
- 23. LiferayからAPIを使用してコンテンツを取得するにはどうすればよいですか?
- 24. PHPを使用してHTMLファイルからメタデータを取得するにはどうすればよいですか?
- 25. LibGit2Sharpを使用してファイルバイナリデータをGitリポジトリから取得するにはどうすればよいですか?
- 26. rsyncを使用してHTTP URLからファイルを取得するにはどうすればよいですか?
- 27. Gremlinを使用してNeo4jからランダムサンプルを取得するにはどうすればよいですか?
- 28. phpを使用してURLにvarsを取得するにはどうすればよいですか?
- 29. バインドを取得してルックアップにDHCP dnsを使用するにはどうすればよいですか?
- 30. Linqを使用してXMLにデータを取得するにはどうすればよいですか?
こんにちはから(blatentlyコピー)を適応させた、私はこのことについて疑問を持っていますか?同じパラメーター化セレクターを使用する2つのコンポーネントがあるとしましょうが、それらの小道具の命名は異なります。この場合、基本的な 'getTodos'と' getVisibilityFilter'が失敗するため、これは機能しません。 例: 'betterFoobar =(ID)=> createSelector(foobarSelector、(foobarValue)=> ID + foobarValue)' 私の考えこれまで: 'mapStateToProps = createStructuredSelector({enhancedFooBar:(状態、ownProps)=> betterFoobar( ownProps.id)(state、ownProps)}) 'しかし、私はこれをメモしないと思います。 –
セレクタのownPropsに依存すると、ReactコンポーネントAPIがReduxステートセレクタに強く結合されるので、私はこの点を明確にするためにこの質問をします。セレクタは非常に強力な再利用性ツールですが、セレクタはコンポーネント間で再利用できません。例えば、私はセレクタをメインプロセスとレンダリングプロセスの両方で電子の複数のコンポーネントで使用したいと考えています。受け入れられた解決策はこの場合には適していないと思われます(当然のことながら、最初の質問に答えるだけで、私のユースケースではいくつかの変更が必要です)。 –