2016-07-29 41 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

你打電話的渲染方法的地方這個功能呢? – azium

+0

是的。我有以下錯誤'不能讀取未定義的屬性'過濾器'。我在一個div中調用它是對的嗎? –

回答

1

你有兩個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()裏面是undefined,這意味着你不是將電影傳遞給它。 – QoP

+0

是的好吧。它的工作!謝謝。 –

相關問題