2017-04-22 2 views
0

Meine App verfügt über eine Komponente, die jedes Mal aktualisiert wird, wenn der Benutzer sie wischt.
Diese Komponente bekommt jedes Mal neue Requisiten und ihre Werte werden entsprechend aktualisiert.
Mit den neuen Daten, die ich erhalte, erstelle ich eine Facebook-Grafik-API-Abrufanforderung, um das Profilbild des Benutzers zu erhalten.
Um es besser aussehen zu lassen, habe ich ein Standardbild hinzugefügt, bis die Abrufanforderung beendet ist. Ich setze das Bild auf componentWillReceiveProps zurück.
Der Fehler, den ich bekomme, ist "Fehler beim Aufrufen der Funktion: RCTDeviceEventEmitter: emit"
Es ist nur happanes, wenn ich nicht remote debuggen (mit dem Chrom-Debugger von nativen reagieren).
Dies ist der entsprechende Code:componentDidUpdate gibt RCTDeviceEventEmitter-Fehler beim Ausführen der Netzwerkanforderung aus

componentWillReceiveProps(nextProps){ 
    var temp; 
    temp=this.state.profileInfo; 
    temp.image='http://s3.amazonaws.com/cdn.roosterteeth.com/default/tb/user_profile_female.jpg'; 
    this.setState({ 
     profileInfo:temp, 
    }); 
    }, 
    componentDidUpdate(prevProps, prevState){ 
    if(prevProps!=this.props){ 
     console.log("Updated!!!"); 
     var api = 'https://graph.facebook.com/' + this.props.owner_id + 
        '/picture?type=normal&access_token=' + this.props.credentials.token; 
     fetch(api) 
      .then((response) =>{ 
       var temp; 
       temp=this.state.profileInfo; 
       temp.image=response.url; 
       this.setState({ 
       profileInfo:temp, 
       }); 
      }) 
      .done(); 
    } 
    }, 
    componentDidMount(){ 
    var api = 'https://graph.facebook.com/' + this.props.owner_id + 
        '/picture?type=normal&access_token=' + this.props.credentials.token; 
    fetch(api) 
      .then((response) =>{ 
      var temp; 
      temp=this.state.profileInfo; 
      temp.image=response.url; 
      this.setState({ 
       profileInfo:temp, 
      }); 
      }) 
      .done(); 
    }, 

Weiß jemand, wie kann ich diesen Fehler beheben? Warum ist es nur, wenn nicht debuggen?

Antwort

0

Werfen Sie einen Blick auf diese: github.com/facebook/react-native/issues/11764. Jemand hat das gleiche Problem mit so wenig Code wie möglich geöffnet, was bedeuten könnte, dass das Problem nicht mit Ihrer React-Komponente zusammenhängt.

componentWillReceiveProps(nextProps){ 
    var temp; 
    temp=this.state.profileInfo; 
    temp.image='http://s3.amazonaws.com/cdn.roosterteeth.com/default/tb/user_profile_female.jpg'; 
    this.setState({ 
    profileInfo:temp, 
    },() => { 
    if(nextProps!=this.props) { 
     console.log("Updated!!!"); 

     var api = 'https://graph.facebook.com/' + nextProps.owner_id + 
     '/picture?type=normal&access_token=' + nextProps.credentials.token; 
     fetch(api) 
     .then((response) => { 
      var temp; 
      temp = this.state.profileInfo; 
      temp.image = response.url; 
      this.setState({ 
      profileInfo: temp, 
      }); 
     }) 
     .done(); 
    } 
    }); 
}, 
componentDidMount(){ 
    var api = 'https://graph.facebook.com/' + this.props.owner_id + 
    '/picture?type=normal&access_token=' + this.props.credentials.token; 
    fetch(api) 
    .then((response) =>{ 
     var temp; 
     temp=this.state.profileInfo; 
     temp.image=response.url; 
     this.setState({ 
     profileInfo:temp, 
     }); 
    }) 
    .done(); 
}, 
+0

Der Fehler ist verschwunden, aber es funktioniert nicht:

Auf jeden Fall können Sie componentDidUpdate Methode überhaupt wie diese entfernen. 'if (nextProps! = this.props)' ist immer falsch und ich aktualisiere das Bild nie. Wenn ich mir das Protokoll anschaue, in dem die aktuellen und vorherigen Requisiten stehen, sind sie nicht gleich. Weißt du, warum? –

+0

componentWillReceiveProps wird jedes Mal aufgerufen, wenn neue Requisiten empfangen werden. 'nextProps! = this.props' sollte eigentlich immer true zurückgeben (nicht sicher, warum Sie falsch werden). Um also zu überprüfen, ob sich die Requisiten geändert haben, sollten wir die Eigenschaften von Requisiten einzeln überprüfen (wie folgt: if (nextProps.owner_id! = This.props.owner_id)) oder einen tiefen Vergleich durchführen. In Ihrem Fall, wenn Sie die Ergebnisse jedes Mal erneut abrufen möchten, können Sie 'if (nextProps! = This.props)' entfernen. – Shota

+0

Ich habe die Bedingung entfernt und jetzt bekomme ich den gleichen Fehler, wenn nicht im Debug-Modus. –

Verwandte Themen