如何检查深层嵌套道具

cub*_*fox 4 javascript arrays reactjs

我经常发现自己必须在映射数组之前构建长链以检查它是否已定义:

this.props.photos &&
this.props.photos.activePhotos &&
this.props.photos.activePhotos.map(...
Run Code Online (Sandbox Code Playgroud)

如果我遗漏了this.props.photos &&,this.props.photos.activePhotos.length &&我的整个应用程序将崩溃,如果photosactivePhotos未定义.

有没有办法检查这些道具,而无需检查我的最终项目的每个父对象/数组?

Tre*_*cos 7

另一种方法是在解构道具时使用道具的默认值:

const active = this.props?.photos?.activePhotos
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果photos未定义,则将替换为空对象.试图activePhotos摆脱它会给你一个空数组,允许你在任何情况下映射它.

  • `const`是你应该默认给你的变量的属性,除非你打算修改它们,在这种情况下你会想要使用`let`.我不会提到`var`的可怕用法.因为看起来OP似乎没有修改他的道具(他不应该反正)我使用`const` (2认同)