如何解决无法读取属性的“长度”? [reactjs]

时间:2018-07-09 18:27:23

标签: javascript reactjs

我正在尝试获取对象的长度,但是却收到此错误消息:

with open('input.txt', 'r') as input_file: with open('output.txt', 'w') as output_file: # We only have to loop through the large file once for line in input_file: # Looping through my data many times is OK as it only contains ~100 elements for stuff in data: # Search the line line_data = re.search(r"(match group a)|(match group b)", line) # Verify there is indeed a match to avoid raising an exception. # I found using try/except was negligibly slower here if line_data: if line_data.group(1): output_file.write('\n') elif line_data.group(2) == stuff: output_file.write('stuff') output_file.close() input_file.close()

我正在尝试获取长度,并且在长度为零时弹出一个窗口。

我尝试使用Uncaught TypeError: Cannot read property 'length' of undefined

情况1:数据不可用,因此this.props.storyboardTargets.length === 0-> (!this.props.storyboardTargets)

案例2:数据在那里,后来被删除或清除,因此需要检查长度

以下是我的代码:

undefined

4 个答案:

答案 0 :(得分:1)

您现在编写的方式无法解决this.props.storyboardTargets可能不确定的问题。您需要像这样更新它:

handleShowPopupTarget = () => {
    if (!this.props.storyboardTargets || !this.props.storyboardTargets.length) {
        console.log(this.props.storyboardTargets);
        toastWarning(WARNING_MSG_NO_TARGET);
    }
};

这意味着如果storyboardTargets未定义,其长度为0,则会触发toastWarning

作为替代方案,您可以为storyboardTargets的空数组的组件定义默认属性。这样一来,它永远不会undefined

答案 1 :(得分:0)

该错误消息表示storyboardTargets未定义。尝试查看是否将storyboardTargets传递到包含您的handleShowPopupTarget方法的组件中。

答案 2 :(得分:-1)

使用 lodash get ,它大大简化了此类错误检查:

_.get(this.props, 'storyboardTargets.length', 'default'); // you could use 0 instead of 'default' in your case

答案 3 :(得分:-1)

您的原始代码为

if (!this.props.storyboardTargets.length) {

它失败了,因为this.props.storyboardTargets是未定义的,而且您无法读取未定义内容的属性,因此会引发错误。

因此,在此之后,您听取了建议并将代码更改为

if (this.props.storyboardTargets && !this.props.storyboardTargets.length)

因此现在这可以停止在此行上发生未定义的错误,因为对this.props.storyboardTargets的真实检查会阻止对代码后半部分的评估。因此,这意味着该代码不会进入if中。但是您希望它进入if语句(如果未定义)。

因此,您需要做的是将其更改为“或”检查,以便未定义它或没有长度

if (!this.props.storyboardTargets || !this.props.storyboardTargets.length)

现在它进入if语句ID,它是未定义的,不会引发错误。

另一种解决方案是查看它是否未定义并将其设置为默认值

this.props.storyboardTargets = this.props.storyboardTargets || []
if (!this.props.storyboardTargets.length)

现在,如果未定义数组,则将其设置为空数组,并且if检查将正常工作。如果其他事情依赖未定义,则更改数据可能不是最佳解决方案。