Javascript ×TypeError:无法读取未定义的属性“displays”

Javascript ×TypeError:无法读取未定义的属性“displays”,javascript,node.js,reactjs,Javascript,Node.js,Reactjs,请帮忙 我使用react创建了一个web应用程序,并将其与node js连接 在那个里,我需要将一道菜的状态传递给DishDetail组件,不管它是否在收藏夹中。 如果不是最喜欢的。我得把它标为最喜欢的。 每当有人点击任何一道菜使其成为最受欢迎的菜时,都会在收藏中添加一个条目,其中包含用户id和菜id 但每当新用户首次登录并尝试将dish添加为favorite时,我会遇到一个错误,即×TypeError:无法读取favorite={this.props.favorites.favorites.d

请帮忙

我使用react创建了一个web应用程序,并将其与node js连接

在那个里,我需要将一道菜的状态传递给DishDetail组件,不管它是否在收藏夹中。 如果不是最喜欢的。我得把它标为最喜欢的。 每当有人点击任何一道菜使其成为最受欢迎的菜时,都会在收藏中添加一个条目,其中包含用户id和菜id

但每当新用户首次登录并尝试将dish添加为favorite时,我会遇到一个错误,即×TypeError:无法读取favorite={this.props.favorites.favorites.dish.somedish=>dish.\u id==match.params.dishId}处未定义的属性'dish'MainComponent.js和FavoriteDish.js的var favorites=props.favorites.favorites.disks.mapdish语句中的语句

MainComponent.js

ActionCreator.js


再见,您可以在DishWithId中修改此行:

与:

FavoriteDish.js中的这一行:

var favorites = props.favorites.favorites.dishes.map((dish)...
与:


再见,您可以在DishWithId中修改此行:

与:

FavoriteDish.js中的这一行:

var favorites = props.favorites.favorites.dishes.map((dish)...
与:


从乔瓦尼·埃斯波西托那里得到了主意

我刚刚更改了这行:-favorite={this.props.favorites.favorites.disks.somedish=>dish.\u id==match.params.dishId}


对此:-favorite={this.props.favorites.favorites?this.props.favorites.favorites.disks.somedish=>dish.\u id===match.params.dishId:false}

从Giovanni Esposito那里得到了灵感

我刚刚更改了这行:-favorite={this.props.favorites.favorites.disks.somedish=>dish.\u id==match.params.dishId}


对此:-favorite={this.props.favorites.favorites?this.props.favorites.favorites.dish.somedish=>dish.\u id===match.params.dishId:false}

检查favorites中的条件,以防favorite未定义。它会自动在那里发送false

favorite={this.props.favorites.favorites ? this.props.favorites.favorites.dishes.some((dish) => dish._id === match.params.dishId): false}

检查收藏夹中的条件,以防收藏夹未定义。它会自动在那里发送false

favorite={this.props.favorites.favorites ? this.props.favorites.favorites.dishes.some((dish) => dish._id === match.params.dishId): false}

你确定这个.props.favorites.favorites正确吗?应该是这个.props.favorites吗?另外,您绝对不能像在中那样修改这个.props,例如`this.props.favorites.favorites=this.props.favorites.favorites[0];`。。。不,没错。一个是我要传递的最喜欢的,另一个是在reducers中创建的数组。@AKX我在这一行没有遇到问题。。。即使去掉那条线也不能解决我的问题。该声明的另一个目的是,您可能不会在那里遇到错误,但您不允许在React land中变异道具,这将导致后续问题。您确定this.props.favorites.favorites正确吗?应该是这个.props.favorites吗?另外,您绝对不能像在中那样修改这个.props,例如`this.props.favorites.favorites=this.props.favorites.favorites[0];`。。。不,没错。一个是我要传递的最喜欢的,另一个是在reducers中创建的数组。@AKX我在这一行没有遇到问题。。。即使去掉那条线也不能解决我的问题。这句话的另一个目的是,你可能不会在那里出错,但你不允许在React land中变异道具,这将导致后续问题。仍然会出现TypeError:无法读取UnfinedEyeah的属性“disks”,我忘了在switchaction.type中的其他收藏夹上添加相同的初始值。我更新了我的答案。还是一样;在控制台中获取此信息-favorites:errMess:无法读取未定义收藏夹的属性'dish':{disks:Array0}isLoading:false OK,因此仍然只有操作ADD_favorites。如果您记录action.payload,您会看到什么?仍然得到TypeError:无法读取UndefinedEyah的属性'disks',我忘记在switchaction.type中的其他收藏夹上添加相同的初始值。我更新了我的答案。还是一样;在控制台中获取此信息-favorites:errMess:无法读取未定义收藏夹的属性'dish':{disks:Array0}isLoading:false OK,因此仍然只有操作ADD_favorites。如果您记录action.payload,您会看到什么?
export const fetchFavorites = () => (dispatch) => {
    dispatch(favoritesLoading(true));

    const bearer = 'Bearer ' + localStorage.getItem('token');

    return fetch(baseUrl + 'favorites', {
        headers: {
            'Authorization': bearer
        },
    })
    .then(response => {
        if (response.ok) {
            return response;
        }
        else {
            var error = new Error('Error ' + response.status + ': ' + response.statusText);
            error.response = response;
            throw error;
        }
    },
    error => {
        var errmess = new Error(error.message);
        throw errmess;
    })
    .then(response => response.json())
    .then(favorites => dispatch(addFavorites(favorites)))
    .catch(error => dispatch(favoritesFailed(error.message)));
}

export const favoritesLoading = () => ({
    type: ActionTypes.FAVORITES_LOADING
});

export const favoritesFailed = (errmess) => ({
    type: ActionTypes.FAVORITES_FAILED,
    payload: errmess
});

export const addFavorites = (favorites) => ({
    type: ActionTypes.ADD_FAVORITES,
    payload: favorites
});
(this.props.auth.isAuthenticated && !this.props.favorites.isLoading)
(this.props.auth.isAuthenticated && !this.props.favorites.isLoading && this.props.favorites.favorites)
var favorites = props.favorites.favorites.dishes.map((dish)...
if (props.favorites.favorites) {var favorites = props.favorites.favorites.dishes.map((dish)...}
favorite={this.props.favorites.favorites ? this.props.favorites.favorites.dishes.some((dish) => dish._id === match.params.dishId): false}