Javascript 初始未定义状态下的选择器函数错误

Javascript 初始未定义状态下的选择器函数错误,javascript,ruby-on-rails,reactjs,redux,Javascript,Ruby On Rails,Reactjs,Redux,我正在制作一个表单,您可以键入电影标题进行搜索,然后从拥有所有电影的州取回电影。我目前正在尝试创建一个选择器,该选择器仅从状态中选择与搜索查询标题相同的电影。我在我的组件中调用了MapStateTrops中的选择器方法,我在教程中看到了该组件,但我相信它在初始状态渲染时出错了 我已经尝试在选择器中的状态上使用if语句,以及在mapState to props中使用if语句,因此如果状态未定义,它将返回状态,但仍然会出现错误 编辑:在运行任何GET_MOVIE_成功之前,此错误最初会出现 选择器.

我正在制作一个表单,您可以键入电影标题进行搜索,然后从拥有所有电影的州取回电影。我目前正在尝试创建一个选择器,该选择器仅从状态中选择与搜索查询标题相同的电影。我在我的
组件中调用了
MapStateTrops
中的选择器方法,我在教程中看到了该组件,但我相信它在初始状态渲染时出错了

我已经尝试在选择器中的状态上使用if语句,以及在mapState to props中使用if语句,因此如果状态未定义,它将返回状态,但仍然会出现错误

编辑:在运行任何GET_MOVIE_成功之前,此错误最初会出现

选择器.js

export function selectMovieFromMovies(state, title) {
  return {
    moviesById: state.moviesById.map(movie => movie.title.toString() === title)
  };
}
MovieForm.js

const mapStateToProps = (state, title) => {
  console.log("state in mapState:", state);
  return {
    moviesById: selectMovieFromMovies(state, title)
  };
};
reducer的相关部分:movies.js

const initialState = {
  moviesById: []
};

function movieReducer(state = initialState, action) {
  switch (action.type) {
    case "GET_MOVIE_SUCCESS":
      console.log("action.json.movies:", action);
      return {
        ...state,
        moviesById: action.json.movies
      };
浏览器中出现错误:

Uncaught TypeError: Cannot read property 'map' of undefined
at selectMovieFromMovies (selectors.js:4)
    at Function.mapStateToProps [as mapToProps] (MovieForm.js:43)

这个例子并没有直接使用Redux,但是这个原则应该适用

您确定在调度
GET\u MOVIE\u SUCCESS
操作时正确设置了电影吗?在某一点上,它变得
未定义

功能从电影中选择电影(状态、标题){
返回{
moviesById:state.moviesById.map(movie=>movie.title.toString()==title)
};
}
常量mapStateToProps=(状态、标题)=>{
log(“映射状态中的状态:”,状态);
返回{
moviesById:选择MoviefromMovies(状态、标题)
};
};
常量初始状态={
moviesById:[]
};
函数movieReducer(状态=初始状态,动作){
开关(动作类型){
案例“获得电影成功”:
log(“action.json.movies:”,action);
返回{
……国家,
moviesById:action.json.movies
};
违约:
返回状态;
}
}
let state=movieReducer(未定义{
类型:“INIT”
});
console.log(状态);
设mapState=mapstatetops(state,“anything”);
console.log(mapState);
状态=移动器(状态{
键入:“获取电影成功”,
json:{}
});
console.log(状态);
mapState=mapstatetops(state,“anything”);//抛出:无法读取未定义的属性“map”

console.log(mapState)我输入的状态路径不正确。感谢@CodeManiac提供解决方案

之前的selectors.js

export function selectMovieFromMovies(state, title) {
  return {
    moviesById: state.moviesById.map(movie => movie.title.toString() === title)
  };
}
selectors.js之后

export function selectMovieFromMovies(state, title) {
  return {
   moviesById: state.movieReducer.moviesById.map(movie => movie.title.toString() === title)
 };
}

在您发布的代码中,根本没有使用
map
,并且您的错误为
map
未定义,请再次检查您发布的数据是否正确或错误是否已修复。是过去尝试的产物。
console.log(“mapState中的状态:”,状态)这一行打印什么?
映射状态:{IngCreditsReducer:{…},recipesReducer:{…},movieReducer:{…}IngCreditsById:Array(0)}movieReducer:{moviesById:Array(0)}recipesReducer:{recipesById:Array(0)}movieReducer:{recipesById:Array(0)}moviesById:Object
您需要使用
state.movieReducer.movieReducer.moviesById.map访问它(movie=>movie.title.toString()==title)