2016-06-01 9 views
0

Ich habe eine Inline-Funktion in meiner Komponente reagieren wie folgt aufgebaut:Zugang Redux Staat Objekteigenschaft in Funktion

render() { 
    const { post } = this.props; 

    return (
     <div> 
      {function(){ 
       if ({post}) { 
        return <h1>Post name exists {post.name}</h1> 
       } else { 
        return <h1> Post name does not exist</h1> 
       } 
      }.call(this)} 
    ..... 

und ich habe redux Zustand wie folgt aufgebaut:

function mapStateToProps(state) { 
    return { 
     post:state.post.single, 
    }; 
} 

der obigen Code funktioniert, aber was ich wirklich überprüfen möchte ist, ob post.name null ist oder nicht, in diesem Fall rende ich verschiedene Dinge auf der Seite. Allerdings halte ich erhalte eine Fehlermeldung, wenn ich dies tun:

if({post.name}) 
+0

@AvraamMavridis sagt, dass das "." in {post.name} ist ein unerwartetes Token. – lost9123193

Antwort

0

ich es durch den Aufruf die Funktion, statt einen Inline-Aufruf zum Laufen zu bringen verwaltet:

renderCheck(){ 
    if(this.props.post.name){ 
     return (
     <div> 
      .... 
     </div> 
    ) 
    } 
} 

im mache ich es wie folgt genannt:

{this.renderCheck()} 

Ich bin immer noch unsicher, warum const {post: {name}} = this.props; hat nicht funktioniert, aber ich werde das für jetzt verwenden.

2

Sie versuchen, innerhalb eines if Wert des Objekts zu extrahieren, können Sie das nicht tun, zum Beispiel:

function something(post){ 
    if({ post.name }) 
    { 

    } 

} 

oder sogar

function something(post){ 
    if({ post}) 
    { 

    } 

} 

Ist nicht gültig js, können Sie es in babel repl

Wha überprüfen t Sie tun können, ist

const { post : { name } } = this.props; 

Und dann überprüfen Sie mit if(name)

+0

Danke Ich versuchte diesen Ansatz, aber ich habe einen Fehler von: Kann nicht lesen Eigenschaft 'Name' von null – lost9123193

+0

@ lost9123193, so dass etwas mit Ihrem Mapping falsch ist, übergeben Sie nicht den Status der Komponente. Verwenden Sie 'connect' und einen Selektor? –

+0

Ah sehen. Ich glaube, es ist verbunden, weil ich dies in der Render-Methode tun kann:

{post.name}

Wofür würde ich den Selektor verwenden? – lost9123193

1

Hallo verwenden eine renderCheck Funktion ist ein guter Ansatz, wenn Sie einige Test zu tun haben. Aber Sie haben eine doppelte Kontrolle props.post und props.post.name zu tun :( Um diesen „verschachtelten“ checks vermeide ich bin mit ImmutableJS, dann in meinem connect würde ich

name: state.getIn(['post'], ['name']) 

hat, das wird wieder undefined entweder Post oder Name ist nicht definiert oder null :)

+0

Danke für den Vorschlag! Würde ich das in die RenderCheck-Funktion einbauen? – lost9123193

+0

Wenn Ihr Zustand ist Immutable freundlich Sie diese direkt in der Verbindungs ​​haben kann, denke ich, wie folgt aus: 'Funktion mapStateToProps (state) { return { postname: Staat.getIn (['post', 'single', 'name']), }; } ' –