代码之家  ›  专栏  ›  技术社区  ›  Kumara

根据“禁用js”按钮检查状态

  •  0
  • Kumara  · 技术社区  · 3 年前

    单击编辑表单时,我正在检查表单状态。在编辑中,status='Draft'。如果状态为草稿,则按钮被禁用。

      <Button className="btn btn-primary" disabled={location.state.status == 'Draft'} type="button" onClick={() => saveAsDraftInvoice(values)}>
                  <i className="mdi mdi-table-edit"></i> Save as Draft
                </Button>
    

    以上代码运行良好。按钮已正确禁用。但当我去添加新记录时,错误说“

    TypeError: Cannot read property 'status' of undefined"
    

    检查下面的屏幕截图 enter image description here

    原因是,当我编辑表单时,状态是在对象内部。当我去保存新记录时,“状态”未定义。我如何解决这个问题

    2 回复  |  直到 3 年前
        1
  •  1
  •   Obed Parlapiano    3 年前

    您可以在每一步检查对象是否存在,以防止尝试访问未定义的值:

    disabled={location && location.state && location.state.status == 'Draft'}

    如果未定义位置或状态 disabled

        2
  •  1
  •   Vlad Hnatovskyi    3 年前

    status 财产存在。

    可在附加条件下完成:
    location.state && location.state.status == 'Draft'

    或使用可选链接:
    location.state?.status == 'Draft'

    <Button className="btn btn-primary" disabled={location.state && location.state.status == 'Draft'} type="button" onClick={() => saveAsDraftInvoice(values)}>
                  <i className="mdi mdi-table-edit"></i> Save as Draft
                </Button>
    

    <Button className="btn btn-primary" disabled={location.state?.status == 'Draft'} type="button" onClick={() => saveAsDraftInvoice(values)}>
                  <i className="mdi mdi-table-edit"></i> Save as Draft
                </Button>