【问题标题】:Updating displayed Item list from dropdown menu selector react/redux从下拉菜单选择器 react/redux 更新显示的项目列表
【发布时间】:2016-07-29 20:12:46
【问题描述】:

我正在尝试了解如何使用 react/redux 过滤项目列表。我已经基于这个questions 构建了这个例子https://jsbin.com/pineyec/edit?html,console,output

经过几个小时和一些帮助,我终于让我的过滤器组件正常工作(我猜)。但是,我真的不明白我应该如何将我的过滤器组件与我的项目列表组件链接起来。

我猜我的问题的关键在于下面的代码,但我不太明白:

// 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;
      }
    });
}

我需要建立新的行动吗?还是新减速机?

我的下一步应该是什么?

谢谢。

【问题讨论】:

  • 你是在某处的渲染方法中调用这个函数吗?
  • 是的。我收到以下错误Cannot read property 'filter' of undefined。我在 div 中调用它对吗?

标签: reactjs redux


【解决方案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

【讨论】:

  • 好收获。这通常不会成为问题,因为通常将组件拆分为单独的文件是明智的,但在 jsbin 中所有内容都在同一个文件中,这可能是一个问题。另一种方法是完全跳过创建命名函数,直接在connect 调用中使用匿名函数。即这样:jsbin.com/wigiyajowi/edit?js
  • 在与答案相同的地方,如果您收到该错误是因为在 getVisibleMovies() 中未定义参数电影,这意味着您没有将电影传递给它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多