2017-09-24 1 views
0

i so viele Möglichkeiten gesucht, diese zu lösen, aber niemand arbeitet, setState noch nicht in der componentWillReciveProps Methode arbeiten hier ist mein Code:reagieren-native: Zustand nicht innerhalb der componentWillReciveProps aktualisiert

export class Detail extends React.Component 
{ 
    constructor(props) 
    { 
    super(props); 
    this.state = { 
     ids: 'ger' 
    } 
    } 

    componentWillReceiveProps(nextProps) { 
    this.setState({ ids: nextProps.data },() => { 
      console.log(nextProps.data+"=this id") 
     }); 
    } 


    render() 
    { 
    return (
     <View> 
     <Text>{this.state.ids}</Text> 
     </View> 
    ); 
    } 
} 

wenn i do console.log(nextProps.data+"=this id") es kann die ID, die ich auf this.state.ids aktualisieren möchte. Aber in der <Text>{this.state.ids}</Text> im Render zeigt immer noch den Standardwert von this.state.ids ('ger'), bedeutet, dass this.state.ids nicht in der componentWillReceiveProps aktualisiert wurde.

+0

Ich denke, das ist mit Ihrer [vorherigen Frage] (https://Stackoverflow.com/q/46389012/2315280) verwandt und kann dadurch verursacht werden, dass Sie keine 'Schlüssel'-Prop auf Ihrem gerenderten Objekt auf Ihrem haben 'ListView'. Bitte werfen Sie einen Blick auf [diese Antwort] (https://stackoverflow.com/a/35229429/2315280) – bennygenel

+0

ich versuchte so und immer noch dieses Problem, das seltsame ist, dass 'nextProps.data' die ID erfolgreich erhalten, wenn Ich mache 'console.log (nextProps.data +" = diese ID ")' (zum Beispiel ist die Ausgabe "4 = diese ID"), aber der IDs-Zustand ist immer noch nicht aktualisiert, selbst wenn ich 'this.setState ({ids : nextProps.data}) 'innerhalb der' componentWillReceiveProps': '( – janotama

Antwort

1

setState() aktualisiert die Komponente nicht immer sofort.

können Sie alles, was Sie brauchen, auf here finden.

eigentlich als react document saya "React ruft componentWillReceiveProps nicht mit initialen Requisiten während des Mounten auf. Es ruft diese Methode nur auf, wenn einige Requisiten der Komponente aktualisiert werden. Der Aufruf von this.setState löst componentWillReceiveProps normalerweise nicht aus."

Sie könnten mehr here finden.

0

Das sieht für mich wie ein Antipattern aus. Warum injizieren Sie nextProps.data nicht direkt als IDs in die Detail-Komponente? Dann können Sie geben die ids direkt wie folgt aus:

<Text>{this.props.ids}</Text> 

Normalerweise sollten Sie auch eine Warnung erhalten, dass setState Aufruf in „componentWillReceiveProps“ keine Auswirkungen haben wird. Wenn Sie wirklich Ihren Status aktualisieren möchten, können Sie "this.state.ids = nextProps.data" tun, denke ich.

+0

Ich glaube, Sie haben einen falschen Status. Überprüfen Sie die [Dokumente für die korrekte Verwendung des Status] (https://facebook.github.io/react/docs/ state-and-lifecycle.html # using-state-correct) für weitere Informationen über das. – bennygenel

+0

Ich weiß, dass setzen Zustand mit this.state.something = ... wird den Status festlegen, aber nicht erneut die Komponente.Nach ComponentWillReceiveProps jedoch sollte die Komponente neu gerendert werden, da die Requisiten sich geändert haben, es sei denn, dass die Funktion "componentUpdate" den Wert "false" zurückgibt Dies ist keine gute Übung. – justadudewhohacks

Verwandte Themen