Nein, es macht keinen Sinn, zu schaffen ein Memo-Selektor, um nur einen Teil des Statusbaums zu erhalten.
Der Grund ist, dass connect
wird es eigene flache Gleichheitsprüfung für jede Requisite von mapStateToProps
übergeben. Wenn die vom Selektor zurückgegebene Prop diese flache Überprüfung der Gleichheit zusammen mit den anderen Requisiten übergibt, wird render
nicht unnötig aufgerufen. Wenn der Selektor einfach einen Teil des Zustandsbaums zurückgibt und dieser Teil des Zustandsbaums nicht modifiziert wurde, ist eine oberflächliche Überprüfung der Gleichheit ausreichend. Wenn der Selektor jedoch anhand der Ergebnisse anderer Selektoren berechnet wird, ist die Verwendung von createSelector
eine gute Wahl. Erstens bietet es eine schöne Syntax zum Erstellen von Selektoren. Zweitens, wenn die Berechnung des Kombinierens der Selektoren potentiell teuer ist, werden Sie einen Leistungsvorteil erhalten. Drittens, wenn der Selektor ein neues, aber gleichwertiges Objekt oder Array zurückgeben würde, wäre die Überprüfung der flachen Gleichheit, die von connect
bereitgestellt wird, nicht ausreichend. In diesem Fall würde die Memoisierung, die createSelector
bereitstellt, sicherstellen, dass dasselbe Objekt oder dieselbe Array-Instanz zurückgegeben wird, wenn sich die Eingaben nicht geändert haben und dann die oberflächliche Überprüfung der Gleichheit ausreicht, um kostspielige erneute Rendervorgänge zu vermeiden.
Also nur für das Freilegen von Teilen des Zustandsbaums createSelector
fügt nichts hinzu.
Für fast alle Selektoren, die aus mehreren Teilen des Statusbaums createSelector
berechnet werden, beginnt der Wert zu erhöhen. Die Höhe des Werts, die hinzugefügt wird, hängt vom Selektor ab, da er einfacher zu lesen ist, um sicherzustellen, dass Sie den Komponentenbaum nicht unnötig rendern.
Große Frage - ich konnte das nirgendwo angesprochen finden. –