避免'无法读取未定义的属性'尝试检查孙子属性时出错

时间:2018-01-16 01:15:21

标签: javascript reactjs

我正在尝试将react组件的状态设置为与react路由器一起传递的location.state,如果它不存在我想将其设置为0.

但是在某些情况下,检查(currentItem)的属性的父(location.state)不存在,因此以下结果导致无法读取未定义的属性'这种情况下的错误

state = {
  currentItem: this.props.location.state.currentItem || 0,
}

我可以使用以下代码避免此错误,但这似乎是一个丑陋的解决方案。

state = {
    currentItem: this.props.location.state
      ? this.props.location.state.currentItem
        ? this.props.location.state.currentItem
        : 0
      : 0
  }

有关如何做得更好的建议吗?

编辑:RobG的评论为我工作,ESLint添加了括号,澄清了正在发生的事情:

state = {
  currentItem: (this.props.location.state && this.props.location.state.currentFear) || 0
}

3 个答案:

答案 0 :(得分:0)

分配变量看起来更好看。您可以将三元语句更改为&&言。

$notes = Note:: orderBy ('id', 'desc') -> get ();
foreach ($notes as $note)
{
    $name = $note->user->name;
}

答案 1 :(得分:0)

一种方法是使用这些库,例如lodash / ramda 如,

const _ = require('lodash')
state = {
  currentItem: _.get(this.props.location, 'state.currentItem') || 0,
}

答案 2 :(得分:0)

我通常以两种方式之一来做这件事。您可以拉入像lodash这样的库并使用get,也可以编写自己的库。我通常最简单的方法是编写一个reduce函数。

function getProperty(object, key) {
  return key.split('.').reduce((current, memo) => {
    return current ? current[memo] : undefined;
  }, object);
}

const props = {
  location: {
    state: {
      currentItem: 'item'
    }
  }
};


alert(getProperty(props, 'location.state.currentItem'));