【发布时间】:2020-03-01 04:49:48
【问题描述】:
我为仍然抛出错误的组件设置了一个简单的状态:TypeError: Cannot read property 'year' of undefined 使用以下代码:
export default class Login extends Component {
state = {
isLoading: false,
events: this.props.events,
activeDate: {
year: this.props.events[0].year || "",
month: this.props.events[0].months[0].month || "",
}
};
//...
}
我无法理解为什么会出现此错误,而不仅仅是将值设置为 null。 undefined 应该将二进制操作呈现为 false 并默认为 ""。谁能解释一下?
【问题讨论】:
-
我猜你想用 ESnext 写的是
year: this?.props?.events?.[0]?.year || "",(见optional chaining),但它还没有被广泛使用(总是可以使用 babel)。问题是,this.props.events[0]是undefined,因此没有名为year的属性。 -
在某些时刻,即使是短暂的时刻,事件是未定义的或空的。您需要添加默认值或增强处理空数组或未定义的逻辑。这可以是在父级添加默认值。据说从道具派生状态是一种反模式。 reactjs.org/blog/2018/06/07/…
-
@AlexanderStaroselsky 谢谢你!这篇文章确实帮助我弄清楚了一些事情。
标签: javascript reactjs logical-operators