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,
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 –
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
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 –