2016-10-24 79 views
0

我知道这是多么愚蠢,但我不明白这个简单的事情。 我有对象,我需要从对象名称。但不明白如何获取内部价值。 My object无法从对象中获取值

我尝试:

data['name'] 
data[0] 
data[0].name 

每次我得到这个错误:

TypeError: Cannot read property

还是要谢谢你。

Upd1:

然后我尝试:

data.constructor

我得到这个:

Cannot read property 'constructor' of null 

我从阿贾克斯得到的数据,从这个question 当我尝试:

JSON.parse(data)

我得到:

SyntaxError: Unexpected token o in JSON at position 1(…)

,当我得到这个从服务器的原始数据:

{"genres":[{"id":28,"name":"Action"},{"id":12,"name":"Adventure"},{"id":16,"name":"Animation"},{"id":35,"name":"Comedy"},{"id":80,"name":"Crime"},{"id":99,"name":"Documentary"},{"id":18,"name":"Drama"},{"id":10751,"name":"Family"},{"id":14,"name":"Fantasy"},{"id":36,"name":"History"},{"id":27,"name":"Horror"},{"id":10402,"name":"Music"},{"id":9648,"name":"Mystery"},{"id":10749,"name":"Romance"},{"id":878,"name":"Science Fiction"},{"id":10770,"name":"TV Movie"},{"id":53,"name":"Thriller"},{"id":10752,"name":"War"},{"id":37,"name":"Western"}]}

+2

嗯,'data [0] .name'应该已经工作了 – 4castle

+0

什么是'data'?控制台日志'data.constructor'找出并发布在这里 –

+0

你是如何得到'数据'?一些ajax API返回一个响应对象,你必须说'response.data ...' – mhodges

回答

0

我不知道,为什么这不起作用,但现在我得到了我需要的一切。谢谢大家。

import React from 'react'; 
    import { render } from 'react-dom'; 
    import 'whatwg-fetch'; 

    const Genres = React.createClass({ 
     getInitialState : function() { 
       return { 
        data: [] 
      }; 
     }, 
     componentDidMount: function() { 
      fetch('https://api.themoviedb.org/3/genre/movie/list?api_key=') 
       .then(function(response) { 
        return response.json() 
       }).then(function(json) { 
        this.setState({data: json.genres}) 
         //console.log('parsed json', json.genres) 
       }.bind(this)).catch(function(ex) { 
        console.log('parsing failed', ex) 
       }) 
     }, 

     render() { 
      var data = this.state.data.map(function(key){ 
            return <li>{ key.name }</li> 
       }) 
      console.log(data) 
      return (
       <div> 
        Genres:{data} 
       </div> 
      ) 
     } 
    }) 

    export default Genres; 
+0

请删除它,因为它不是一个答案,而是一个回应。 –

1

审查您的其他问题后,这是你的代码,我假设。

const Main = React.createClass({ 
    getInitialState : function() { 
    return { 
     data: null 
    }; 
}, 

componentDidMount: function() { 
    var self = this; 
    axios.get('https://api') 
     .then(function (response) { 
      self.setState({data: response.data}) 
      console.log(response.data); 
     }) 
     .catch(function (error) { 
      console.log(error); 
     }); 
     console.log('mount ' + this.state.data); 
}, 
    render() { 
     return (
      <h1>{JSON.stringify(this.state.data)}</h1> 
     ) 
    } 
}) 
export default Main; 

当您正在等待服务器返回数据时Main.data等于空。这就是为什么你得到null类型,如果你像数组一样访问数据,你会得到一个类型错误。您可以在等待数据填充时将Main.data默认为空数组。

const Main = React.createClass({ 
    getInitialState : function() { 
    return { 
     data: [] 
    }; 
}, 

当您使用React时,您还需要在数据更改后更新组件。我建议看看this这个问题。

+0

只是从服务器响应,不明白我不能访问对象的一部分。也许这个问题与axios。 – steelRat

+0

这是否为您清除它? –

+0

是的,我读了如何在反应中使用ajax,如何更新反应组件,现在一切都很好。谢谢。 – steelRat