this.state.foo.includes('bar') returns: TypeError: Cannot read property 'includes' of undefined
很好奇。我要尝试检查状态变量中是否存在子字符串。假设我的状态如下:
this.state = {
something: 'foo bar'
}
现在在return()函数中,我想检查this.state.something是否包含子字符串'foo'。
我知道我可以使用: this.state.something ==='foo bar'吗?做这个:做那个
但是由于状态变量的内容是由外部JSON文件设置的,所以我事先不知道字符串的确切内容,而且在我代码的这个特殊位置,我只关心'foo'是否以子字符串。
如果我尝试:
this.state.something.includes('foo') ? dothis : dothat
我得到一个:TypeError: Cannot read property 'includes' of undefined
indexOf()
和match()
也会产生错误。
我该怎么办? 预先感谢。
答案 0 :(得分:0)
要使用includes
,必须在字符串的实例上调用它。因此,例如,如果this.state.something
的值为undefined
,则会出现此错误。
您可以将值初始化为字符串,或者首先使用简单的存在检查,例如this.state.something && this.state.something.includes(‘foo’)
。无论哪种情况,如果该值都不是字符串,仍然会出现错误,因此您也可以考虑进行类型检查。
答案 1 :(得分:0)
this.state.something在使用时可能未定义。 您可能会在构造函数中将其默认值设置为空字符串,或者在使用它之前检查是否首先定义了this.state.something
constructor() {
this.state = {
something: ''
}
}
OR
this.state.something && this.state.something.includes('foo');