javascript - 访问前检查数据是否存在,防止访问未定义错误

标签 javascript reactjs lodash

我正在使用 React 来访问从 API 返回的一些数据。下面的代码可以工作,但看起来确实是重复的。有没有更好的方法来执行此操作,以便我不会因访问 null 属性而意外收到错误?

renderComicList() {
    var detail = this.props.seriesDetail;

    if (!detail || !detail[0] || !detail[0].comics || !detail[0].comics.items) {
        return (
            <div>No data exist (yet)</div>
        )
    }

    if (detail[0].comics.items.length === 0) {
        return (
            <div>No Comic Found</div>
        )
    }

    return (
        <div>
            {detail[0].comics.items[0]}
        </div>
    )
}

最佳答案

如果这些条件中的每一个都存在,则不可以,除非使用错误处理:

renderComicList() {
    var items;

    try {
        items = this.props.seriesDetail[0].comics.items;
    }
    catch (e) {
    }
    if (!items) {
        return <div>No data exist (yet)</div>;
    }

    if (!items.length) {
        return (
            <div>No Comic Found</div>
        )
    }

    return (
        <div>
            {items[0]}
        </div>
    )
}

我添加了对原始代码未处理的两种情况的处理:detail[0].comics 存在,但 detail[0].comics.items 不存在,并且 detail[0].comics.items 存在,但没有 length 属性。

关于javascript - 访问前检查数据是否存在,防止访问未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43741894/

相关文章:

javascript - 无法在 AJAX 加载的表中设置 onclick

javascript - React-Three-Renderer 引用在 componentDidUpdate 中不是当前的(包括 MVCE)

javascript - 如何使用 javascript Lodash 将所有对象插入另一个数组

javascript - 无法使用 lodash 更改对象键值

javascript - 单击表格的单元格出现模式

javascript - react 中的 setTimeout 函数导致类型错误

reactjs - 外部(npm 打包)组件未调用 React setState 回调

javascript - React 生命周期方法的类属性

javascript - 按每个对象属性对 javascript 数组进行排序

javascript - 在Javascript中使用回调函数