检查状态对象是否为空

21

我有一个React JS状态对象,并且希望在对象为空时执行一些代码。我的逻辑有什么问题吗?因为if块中的代码没有被执行。

if (this.state.errors == null) {
  this.props.updateUser(user);
  this.props.navigation.goBack();
}

如果您特别想检查 null,请使用 "==="。否则,@Ankit Agarwal 的答案似乎已经很全面了。 - Waleed Iqbal
5个回答

52
考虑到this.state.errors是一个对象,你可以这样做,
//when this.state.errors object is empty 
if (Object.keys(this.state.errors).length === 0) {
  this.props.updateUser(user);
  this.props.navigation.goBack();
}

Object.keys会返回对象this.state.errors的所有键的数组。然后,您可以检查该数组的长度来确定它是否为空对象。


我尝试使用“NOT”运算符,但逻辑似乎仍然无法正常工作。我在代码块中添加了一个日志语句,它没有进入if代码块。 - Nithin Srinivasan
你能发布一下 this.state 中的内容吗?添加一个调试器并检查它的值。 - Ankit Agarwal
@NithinSrinivasan 好的,我已经编辑了答案。现在应该可以工作了。 - Ankit Agarwal
抱歉导致误解,我希望在没有错误时执行该代码块。 - Nithin Srinivasan
如果你想反转条件,请使用Object.keys(this.state.errors).length != 0而不是!Object.keys(this.state.errors).length == 0 - Boommeister
显示剩余3条评论

2

实际上,您需要首先检查 this.state.errors 是否存在,然后再检查对象是否为 null

if (this.state.errors && !Object.keys(this.state.errors)) {
    this.props.updateUser(user);
    this.props.navigation.goBack();
}

1
尝试检查状态而不是错误集合:
if (this.state) {
    this.props.updateUser(user);
    this.props.navigation.goBack();
}

cheers


1
你可能需要这样做。
if (this.state && !this.state.errors) {
  this.props.updateUser(user);
  this.props.navigation.goBack();
}

当你在访问另一个对象中的对象值时,你可能需要检查父对象是否存在。如果对象this.statenullundefined,它会抛出控制台错误。

Uncaught TypeError: Cannot read property 'errors' of undefined
at <anonymous>:1:15

-1

-- 如果是数组

if(!this.state?.example?.length)  //ES 6 and above

-- 如果是对象

if(!Object.entries(this.state?.example).length)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接