2016-07-29 10 views
0

react/reduxでアイテムのリストをフィルタリングする方法を理解しようとしています。私はこの例に基づいてhttps://jsbin.com/pineyec/edit?html,console,outputを構築しました。questions表示されたアイテムリストをドロップダウンメニューセレクタから更新するreact/redux

数時間後、最終的に私のフィルタコンポーネントが正しく動作しました(私は推測します)。しかし、どのように私のフィルタコンポーネントを私のアイテムリストコンポーネントとリンクさせるべきか、本当に理解していないのです。

私は私の問題の鍵は、次のコードであると思いますが、私は実際にそれを理解していない:

// Getting visible movies from state. 
function getVisibleMovies(year, genre, rating, sorting, movies) { 
    return movies 
    .filter(m => { 
     return (
     (year == 'all' || year == m.year) && 
     (genre == 'all' || genre == m.genre) && 
     (rating == 'all' || rating == m.rating) 
    ); 
    }) 
    .sort((a, b) => { 
     if (sorting == 'year') { 
     return b.year - a.year; 
     } 
     if (sorting == 'rating') { 
     return b.rating - a.rating; 
     } 
     if (sorting == 'alphabetically') { 
     return a.title > b.title ? 1 : a.title < b.title ? -1 : 0; 
     } 
    }); 
} 

は、私は新しいアクションを構築する必要がありますか?または新しい減速器?

次のステップは何ですか?

ありがとうございました。

+0

に、あなたはどこかにrenderメソッドでは、この関数を呼び出していますか? – azium

+0

私は次のエラーがあります。 '未定義のプロパティ' filter 'を読み取ることができません。私はdivでそれを右に呼んでいるのですか? –

答えて

1

名前が同じ2つのmapStateToProps関数があるので、常に最後の関数を呼び出しています。

変更

function mapStateToProps(state) { 
      return { 
      movies: state.moviesReducer.movies, 
      }; 
     } 

const MovieOne = connect(mapStateToProps)(Movies); 

function mapStateToPropsMovies(state) { 
     let {year,genre,rating,sorting,movies} = state.moviesReducer; 
     return { 
     movies: getVisibleMovies(year, genre, rating, sorting, movies) 
     }; 
} 


const MovieOne = connect(mapStateToPropsMovies)(Movies); 

jsbin working

+1

良いキャッチ。一般的に、コンポーネントを別々のファイルに分割するのが賢明ですが、すべてが同じファイル内にあるjsbinでは問題になる可能性があるため、通常は問題にはなりません。別の方法として、名前付き関数の作成をスキップして、単純に 'connect'呼び出しの中で無名関数を使用する方法があります。つまり、次のようになります:http://jsbin.com/wigiyajowi/edit?js – John

+0

答えと同じ場所で、そのエラーが発生した場合は、getVisibleMovies()内でパラメータムービーが未定義であるため、それに映画を渡す。 – QoP

+0

ええ、それを得ました。それは働いている!ありがとう。 –

関連する問題