解构嵌套参数,未定义错误

Destructuring nested params, undefined error

解构时我不断得到 payload undefined:

let videosArray = [];
if (payload.videos) {
  const {
    payload: { videos }
  } = action;
  videosArray = videos;
}

return videosArray;

如何检查未定义?我尝试了下面的检查,但不断收到错误消息:

   if (typeof payload !== "undefined") {

您需要像这样定义操作 const action = {payload: {videos: ["Matrix", "Star Wars"]}}

并且您可以像这样检查有效载荷是否未定义 if(action && action.payload) 然后您可以进行破坏操作。

你只需要确保首先定义了动作,然后访问它的参数而不是自己调用负载。在您的示例中,当您尝试访问 payload 时,它看起来好像未声明 [​​=13=]

function getVideos(action) {
  if (action && action.payload && action.payload.videos) {
    const {payload: {videos}} = action;
    return videos;
  }

  return [];
}

console.log(getVideos()); // action undefined, expected []
console.log(getVideos({})); // payload undefined, expected []
console.log(getVideos({payload: {}})); // videos undefined, expected []
console.log(getVideos({payload: {videos: [1,2,3]}})); // expected [1,2,3]

当然,如果你真的想通过解构来完成任务,你可以简单地创建一些默认值,如下所示:

function getVideos(action) {
  const {payload: {videos=[]}={}} = action || {};
  return videos;
}

console.log(getVideos()); // action undefined, expected []
console.log(getVideos({})); // payload undefined, expected []
console.log(getVideos({payload: {}})); // videos undefined, expected []
console.log(getVideos({payload: {videos: [1,2,3]}})); // expected [1,2,3]

您可以在不解构的情况下进行检查和默认值。

function getVideos(action) {
    return action && action.payload && action.payload.videos || [];
}

console.log(getVideos());                 // action undefined, expected []
console.log(getVideos({}));              // payload undefined, expected []
console.log(getVideos({ payload: {} }));  // videos undefined, expected []
console.log(getVideos({ payload: { videos: [1, 2, 3] } })); // expected [1, 2, 3]