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. Reduxフォームを使用してチェックボックスから値を取得するにはどうすればよいですか?
- 2. オブジェクトが同じ場合、変更リストでreselectを使用するにはどうすればよいですか?
- 3. ember-dataを使用してRESTデータを取得/取得するにはどうすればよいですか?
- 4. requirejsを使用しないでreduxを使用するにはどうすればよいですか?
- 5. APIレスポンスをキャッシュして後でreact&reduxで使用するにはどうすればよいですか?
- 6. react-reduxのOwnPropsとは何ですか?
- 7. React reduxでajaxコールを使用してデータセットをロードするにはどうすればよいですか?
- 8. json.netを使用してすべてのフィールドを取得するにはどうすればよいですか?
- 9. getElementsByClassName()でjavascriptでhtmlの表を取得して使用するにはどうすればよいですか?
- 10. プロバイダでguiceを使用してコンテキストを取得するにはどうすればよいですか?
- 11. OSX/macOSでAPIを使用してファイルシステムタイプを取得するにはどうすればよいですか?
- 12. psycopg2を使用してポストグルでテーブルを取得するにはどうすればよいですか?
- 13. Javaを使用してCassandraでテーブル名を取得するにはどうすればよいですか?
- 14. XCUITestを使用してSkyFloatingLabelTextFieldでフローティングタイトルのコンテンツを取得するにはどうすればよいですか?
- 15. EditTextを使用してdoInbackGround(AsyncTask)でパラメータを取得するにはどうすればよいですか?
- 16. AngularJSを使用してsvgサークル上でツールチップを取得するにはどうすればよいですか?
- 17. PHPを使用してMySQLで検索インデックスを取得するにはどうすればよいですか?
- 18. Matlabでハンドルを使用してオブジェクトを取得するにはどうすればよいですか?
- 19. JavaScriptを使用してmaps.google.comでズームレベルを取得するにはどうすればよいですか?
- 20. AngularJSでスクリプトタグを使用して動的コンテンツを取得するにはどうすればよいですか?
- 21. C#を使用してActive DirectoryでschemaNamingMasterを取得するにはどうすればよいですか?
- 22. Struts2でES6フェッチを使用してデータを取得するにはどうすればよいですか?
- 23. nginxサーバブロックでregexを使用してparamを取得するにはどうすればよいですか?
- 24. テキストクエリを使用してAndroidで場所を取得するにはどうすればよいですか?
- 25. cubic spline interpolationを使用してJavaでカーブを取得するにはどうすればよいですか?
- 26. ewを使用してカレンダーでメールボックスを取得するにはどうすればよいですか?
- 27. spring mvcを使用してインターセプターでプリンシパルを取得するにはどうすればよいですか?
- 28. ループを使用してテキストフィールドで値を取得するにはどうすればよいですか?
- 29. Javaで再帰を使用してgoldenRatioを取得するにはどうすればよいですか?
- 30. AndroidスタジオでRobotiumを使用してコードカバレッジを取得するにはどうすればよいですか?
こんにちはから(blatentlyコピー)を適応させた、私はこのことについて疑問を持っていますか?同じパラメーター化セレクターを使用する2つのコンポーネントがあるとしましょうが、それらの小道具の命名は異なります。この場合、基本的な 'getTodos'と' getVisibilityFilter'が失敗するため、これは機能しません。 例: 'betterFoobar =(ID)=> createSelector(foobarSelector、(foobarValue)=> ID + foobarValue)' 私の考えこれまで: 'mapStateToProps = createStructuredSelector({enhancedFooBar:(状態、ownProps)=> betterFoobar( ownProps.id)(state、ownProps)}) 'しかし、私はこれをメモしないと思います。 –
セレクタのownPropsに依存すると、ReactコンポーネントAPIがReduxステートセレクタに強く結合されるので、私はこの点を明確にするためにこの質問をします。セレクタは非常に強力な再利用性ツールですが、セレクタはコンポーネント間で再利用できません。例えば、私はセレクタをメインプロセスとレンダリングプロセスの両方で電子の複数のコンポーネントで使用したいと考えています。受け入れられた解決策はこの場合には適していないと思われます(当然のことながら、最初の質問に答えるだけで、私のユースケースではいくつかの変更が必要です)。 –