2017-11-28 6 views
1

Betrachten Sie, ich habe eine Dump-Komponente, die zur Anzeige von Benutzerinformationen verwendet wird. Im moment gibt es 2 Möglichkeiten, Benutzerinformationen zu Komponente zu übergeben:Welcher Weg ist besser, ein Objekt an eine Dump-Komponente in Native React zu übergeben?

1):

class UserItem extends PureComponent { 
    // pass user's properties 
    const { 
     userName, userEmail, 
    } = this.props; 
    // same 
    render() { 
     return (
      <View> 
       <Text>{userName}</Text> 
       <Text>{userEmail}</Text> 
      </View> 
     ); 
    } 
} 

2):

class UserItem extends PureComponent { 
    // pass a user object 
    const { 
     userName, userEmail, 
    } = this.props.user; 
    // same 
    render() { 
     return (
      <View> 
       <Text>{userName}</Text> 
       <Text>{userEmail}</Text> 
      </View> 
     ); 
    } 
} 

Also, welchen Weg soll ich verwenden? Ich werde einige Vor-& Nachteile Liste nach unten, die ich auf 2 Arten wissen:

1)

Profis:

  • die Logik sehr einfach zu verstehen ist, gibt es keine „Magie“ Dinge passieren, um die Komponente Anzeige, was Sie in übergeben.

  • die Macht des PureComponent durch flache vergleichen & Requisiten Zustand (https://reactjs.org/docs/shallow-compare.html) verwenden kann, so dass die Komponente nur wieder machen bekommt whend benötigt

Nachteile:

  • Ich habe vorbei viele Parameter eingeben, wie <UserItem userName={user.name} userEmail={user.email}> (es sei denn, Sie Betreiber Verbreitung verwenden ...user, aber Sie werden alle Objekteigenschaften passieren)

  • ich nicht kann Verwenden Sie die Objektmethode in der Komponente. Zum Beispiel hat mein Benutzermodell eine Methode user.totalMoneys(), weil es in meinem Objekt einige faul berechnete Eigenschaften gibt.

2)

Pro:

  • Gang sieht einfach aus: <UserItem user={user}>

  • können Objektmethode innerhalb UserItem

cons verwenden:

  • ich nicht in den Genuss von PureComponent verwenden können, muss ich meine eigenen vergleichen,

Antwort

1

ich, was die beste zu gehen, ist die 1, ich sehe oft die Ausbreitung Operator für diese verwendet, btw können Sie Tun Sie dies im Elternteil, um unnötige Stützen zu vermeiden:

class UserParent extends Component { 
    const { uselessProp1, uselessProp2, ...usefullProps } = this.props; 
    render() { 
     return (
      <View> 
       <UserItem {...usefullProps} /> 
      </View> 
     ); 
    } 
} 
+0

Dank Dyo, es ist eine sehr schlaue Art, die redundanten Requisiten zu entfernen. Der Grund, warum ich diese beiden Möglichkeiten vergleiche, ist, dass ich aus einem OOP-Hintergrund komme, und es ist sehr praktisch, ein ganzes User-Objekt zu übergeben (weil ich im User auch einige Methoden, berechnete Eigenschaften, etc. definiere) Ich frage mich nur Gibt es eine andere Möglichkeit, die Methoden und berechneten Eigenschaften meines Benutzers zu organisieren? zum Beispiel könnte ich 'fullname' Methode haben, die' lastname + vorname' zurückgibt –

+0

Es funktioniert mit Objektmethode, Sie können es in Ihrer PureComponent aufrufen: ' {this.props.fullname()}' aber Sie müssen Zugriff haben zu Requisiten, die in dieser Funktion verwendet werden (Sie müssen in diesem Fall auch Nachnamen- und Vorname-Requisiten übergeben) – Dyo

+0

Ja, ich denke, ich kann auch die Funktion übergeben. Aber in OOP habe ich normalerweise eine lazy-berechnete Eigenschaft wie folgt: https://gist.github.com/tranquan/4d7744f2807cf6fe8457461263109b36, so dass 'mCreateTimeMoment' nur bei Bedarf erstellt wird. Ich frage mich, ob es so etwas gibt, was ich in FP machen kann, oder indem ich "Objekt-Requisiten" statt eines ganzen "Objekts" übertrage. Danke Dyo –

Verwandte Themen