2016-03-09 15 views
5

Bir sunucudan bazı verileri getirmeyi denedim ve bazı garip nedenlerden dolayı componentDidMount() olması gerektiği gibi çalışmıyor. Ben ateş etmek olup olmadığını kontrol etmek için componentDidMount() içinde bir console.log() ekledi. Sunucunun isteğinin gerektiği gibi çalıştığını biliyorum. Reaksiyonun dışında kullandım ve gerektiği gibi çalıştı. BuradacomponentDidMount() yanıt bileşen yüklenirken çağrılmıyor

class App extends React.Component { 
    constructor(props, context) { 
    super(props, context); 
    this.state = { 
     obj: {} 
    }; 
    }; 

    getAllStarShips() { 
    reachGraphQL('http://localhost:4000/', `{ 
    allStarships(first: 7) { 
     edges { 
     node { 
      id 
      name 
      model 
      costInCredits 
      pilotConnection { 
      edges { 
       node { 
       ...pilotFragment 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
    fragment pilotFragment on Person { 
    name 
    homeworld { name } 
    }`, {}). then((data) => { 
    console.log('getALL:', JSON.stringify(data, null, 2)) 
     this.setState({ 
     obj: data 
     }); 
    }); 
    } 

    componentDidMount() { 
    console.log('Check to see if firing') 
    this.getAllStarShips(); 
    } 

    render() { 
    console.log('state:',JSON.stringify(this.state.obj, null, 2)); 
    return (
    <div> 
     <h1>React-Reach!</h1> 
     <p>{this.state.obj.allStarships.edges[1].node.name}</p> 
    </div> 
); 
} 

} 

render(
    <App></App>, 
    document.getElementById('app') 
); 
+0

ReactDOM.render kullanıyor musunuz? Bileşeni orijinal durumla oluşturma konusunda sorunlarınız olabilir. This.state.obj.allStarships.edges [1] .node.name dosyasının tamamını orijinal duruma (veya render yönteminizde kullanımında biraz daha güvenli) sağlamayı deneyin. –

+0

"allStarships" undefined "olduğu için, bileşeniniz ilk kez oluşturulurken TypeError öğesinin olması gerekir. Öyleyse, bu, uygulamanızı kilitleyebilir ve çalışma zamanı yürütmesini engelleyebilir. Sadece bir tahmin. –

+0

Jim Pedid'i ne demek istediğinden emin değilim, tepki-dom kullanıyorum. –

cevap

8

sorun aşağıdaki satırı this.state.obj.allStarships.edges kullanmak için bir hata

<p>{this.state.obj.allStarships.edges[1].node.name}</p> 

Fix üretilmesi nedeniyle hale yöntem çökmesini olmasıdır: [1] .node.name, her alıcının tanımlandığını garanti edemediğiniz sürece.