如何修复" 类型错误:未定义不是对象(评估"subitem.media_details.size.medium.source_url")"



当我尝试从WordPress API中提取图像source_URL时,我得到TypeError:Undefined不是一个对象(评估'subitem.media_details.size.medium.source_url')。

https://i.stack.imgur.com/rhSZc.jpg

https://i.stack.imgur.com/T4PMO.jpg

上面附加图像中的错误消息指向以下代码行

{this.state.data && this.state.data.length > 0 && ( this.state.data.map(post => (

{post.featured_media > 0 && post._embedded['wp:featuredmedia'].filter(element => element.id == post.featured_media).map((subitem, index) => (

source={{ uri: subitem.media_details.sizes.medium.source_url }}

我已经浏览了我的wordpress API中的JSON数据,并且肯定有一个URL。

 class HomeScreen extends React.Component {
 constructor(){
 super();
  this.state = {
      data: null,
      loaded: true,
      error: null
   }
}
baseURL = 'https://wordpress-URL';
getData = (ev)=>{
this.setState({loaded:false, error: null});
let url = this.baseURL + '/posts?_embed';
let req = new Request(url, {
    method: 'GET'
});
fetch(req)
.then(response=>response.json())
.then(this.showData)
.catch(this.badStuff)
}
showData = (data)=>{
    this.setState({loaded:true, data});
    console.log(data);
}
badStuff = (err) => {
    this.setState({loaded: true, error: err.message});
}
componentDidMount(){
    this.getData();
}
  render() {
return (
  <ScrollView>
    { this.state.error && ( <Text style={styles.err}>{this.state.error}</Text> )}
    {this.state.data && this.state.data.length > 0 && (
      this.state.data.map(post => (
        <View key={post.id} >
          <TouchableOpacity onPress={() => this.props.navigation.navigate('Details', { article: post.content.rendered, title: post.title.rendered} )} >
            <View style={{ flex: 1, flexDirection: 'row', justifyContent: 'space-evenly', paddingTop: 25 }}
              borderBottomWidth={0.8}
              borderBottomColor={'gold'}  >
              <View>
                {post.featured_media > 0 && post._embedded['wp:featuredmedia'].filter(element => element.id == post.featured_media).map((subitem, index) => (
                  <Image
                    source={{ uri: subitem.media_details.sizes.medium.source_url }}
                    style={{ width: width / 3, height: height / 5, borderRadius: 10 }}
                    key={index} />
                ))
                }
                {/* <Image source={require('../assets/Hotelcalifornia.jpg')}
                  style={{ width: 150, height: 150, borderRadius: 10 }} /> */}
              </View>
              <View style={{ height: 170 }} >
                <Text style={{ width: width / 2, height: height / 5 }}
                  fontSize={30} >
                  {post.title.rendered}
                </Text>
              </View>
            </View>
          </TouchableOpacity>
        </View>
      )))}
  </ScrollView>
);
}
}

我希望来自 URL 的图像显示在 标记,但相反,我得到类型错误:未定义不是对象

调试并检查您尝试映射的过滤数组中的每个元素,以查看每个元素是否存在所有嵌套对象。subitem.media_details.size.medium.source_url 链中可能有一个嵌套对象,至少有一个元素不存在。

您可以通过

执行source={{ uri: subitem.media_details.sizes.medium.source_url || '' }}来防止它

检查您的 JSON 数据方案中是否有任何递归引用!同样的错误在使用 swagger 编辑器来定义 OpenAPI REST API (JSON/YAML) 时会出现问题。递归引用在 swagger 编辑器中报告为"未定义不是一个对象(评估'm[b]')"。我花了几个小时才找到这种行为的原因。另请参阅以下问题: https://github.com/swagger-api/swagger-ui/issues/3325希望这有帮助。祝你好运!

相关内容

  • 没有找到相关文章

最新更新