2017-06-21 66 views
0

API调用的数据我用爱可信在形式的API调用:设置道具的成分在MongoDB中

Service.get('path/to/api', 
    (status, data) => { 
     this.setState({ ComponentData: data, loaded: true}); 
    }); 

{this.state.loaded && <Component id={this.state.ComponentData.id} 
         prop1={this.state.ComponentData.prop1} 
         prop2={this.state.ComponentData.prop2.propVal} /> 
} 

我遇到的问题是,如果一个字段为空/空在mongoDB中,它在响应数据中根本不返回。正因为如此,如果prop2是一个对象或者是空的,这会抛出一个错误,并与Uncaught TypeError断开:无法读取未定义的属性'propVal'。

设置道具来处理这个问题的最好方法是什么?这是必须在API方面处理的东西吗?

回答

1

您可以使用“PROP2”值检查以下类型:

const { id, prop1, prop2 } = this.state.ComponentData; 

{this.state.loaded && <Component 
    id={id} 
    prop1={prop1} 
    prop2={prop2 ? prop2.propVal : undefined} 
/> 
} 
+0

感谢您的答复!有没有技术上的原因可以阻止: prop2 = {this.state.prop2? this.state.prop2.propVal:undefined} 或者这只是一个最佳实践? – mikeg542

+0

它只是让你写更少的代码。这没有任何技术原因。 –

0

还有来自Lodash一个有趣的方法 - _get

它基本上是试图访问嵌套属性,如果这是不可能失败的失败。你也可以提供一个默认值来返回,以防你无法访问嵌套属性。

包括方法到组件后,你可以写类似

... 
prop2=_get(this.state, 'ComponentData.prop2.propVal', undefined) 
...