オブジェクトの配列としていくつかのデータがあります。redux と react-redux でソートまたはフィルタリングします。
私の初期状態:
let initialState = {
persons:[],
active:0,
loading:false,
filter:"",
field:"name",
increase:true
}
フィルタリングとソートはUIの扱いなので、コンテナ(スマートコンポーネント)に実装しようとします。過去数日間 redux,react-redux のドキュメントを読んでいて、reselectを使用する必要があることがわかりました。そこで、2 つのセレクターを作成しました。並べ替えられた最新のデータ配列を格納する sortData と、フィルター処理された最新のデータ配列を格納するfilterDataです。
セレクターの引数 - セレクター監視のフィールド:
let getPersons = (state) => state.persons
let getFilter = (state) => state.filter
let getField = (state) => state.field
let getIncrease = (state) => state.increase
sortData :
let sortData = createSelector(
[getPersons, getField,getIncrease],
(persons,field,increase) => {
console.log("SORT");
let sortarr = persons.slice(0);
return sortarr.sort((a , b) => {
if (a[field] > b[field]) return increase ? 1: -1
if (a[field] < b[field]) return increase ? -1:1
return 0
})
})
フィルターデータ:
let filterData = createSelector(
[sortData,getFilter],
(persons,filter) => {
return persons.filter( p =>{
console.log("FILTER");
return p.name.toLowerCase().indexOf(filter.toLowerCase()) !== -1
})
},
)
私のmapStateToProps :
let mapStateToProps = (state) =>{
let modernState = filterData(state)
return {
activePerson:modernState[state.active],
persons:modernState,
loading:state.loading,
active:state.active
}
}
- 再計算せずにこの機能を作成するにはどうすればよいですか?
- reselectなしで実装できますか?
PSダン・アブラモフの例を読みましたが、残念ながら、それを自分のタスクの解決に適用することはできませんでした. その他のコード:ここにリンクの説明を入力してください