2016-09-01 1 views
1

mit habe ich ein redux Geschäft wie so:Redux store - Schlüssel eines Objekts zugreifen, wenn sie nicht Arrays

{ 
    '1f458697-e2c0-4d11-ada0-ee7b113c2429': { 
    name: 'Jim', 
    title: 'Developer', 
    active: true 
    }, 
    '4498eb08-3786-495a-a66c-21a65138ab24': { 
    name: 'Darren', 
    title: 'Human Resources', 
    active: false 
    }, 
    'c7975551-153f-4eab-a875-ed5445f76252': { 
    name: 'Francesa', 
    title: 'Chief of Internal Operations', 
    active: false 
    } 
} 

Und ich habe einen Selektor, der einen aktiven Benutzer erhält.

export const getActiveUser = (users) => _.find(users, { 'active': true }); 

Meine Frage ist, was ist der schönste Weg, um die ID des Benutzers in der Nutzlast enthalten in meinem Reagieren Komponente zu verwenden:

  1. Ist das eine schlechte Praxis ist und ein Zeichen, dass ich sollte stattdessen ein Array verwenden.

  2. Sollte ich nur meine Benutzer Payload ändern, um die ID aufzunehmen. Das fühlt sich falsch an, da ich Daten duplizieren würde.

  3. Sollte ich diesen spezifischen Selektor manipulieren, um die Benutzer-ID aufzunehmen.

Antwort

0

- Ist das eine schlechte Praxis ist und ein Zeichen dafür, dass ich stattdessen ein Array verwenden sollte.

Die Normalisierung der Daten, so dass Sie Elemente (Benutzer in Ihrem Fall) in O (1) bearbeiten oder löschen können, ist ein guter Ansatz, der auch in der idiomatic redux course von Dan Abramov behandelt wird.

- Sollte ich nur meine Benutzer Payload ändern, um die ID aufzunehmen. Das fühlt sich falsch an, da ich Daten duplizieren würde.

Da Sie IDs normalerweise nicht ändern, sollte das Hinzufügen in das Objekt des Benutzers kein Problem sein, und Sie sollten schnell auf die ID zugreifen können. Aber wenn du nicht duplizierst, ist das auch akzeptabel.

- Sollte ich diesen spezifischen Selektor manipulieren, um die Benutzer-ID aufzunehmen.

Ein Teil der Rolle der Selektoren besteht darin, abgeleitete Daten zu erstellen, genau wie beim Filtern der Benutzer. Also, wenn Sie die ID für jeden Benutzer möchten, ist dies ein guter Ort, um dies zu tun. Verwandeln Sie die Objekte nicht, sondern erstellen Sie neue Benutzerobjekte mit ID. Wenn Sie jedoch viele Benutzer haben, sollten Sie memoized selectors verwenden oder die ID als Teil der Nutzlast hinzufügen, um Leistungsprobleme zu vermeiden.

1

Ja, verwenden Sie Arrays für tabellenartige Daten und filter Funktion zum Filtern der Ergebnismenge (wenn mehrere Benutzer gleichzeitig aktiv sein können). Wenn nur ein Benutzer gleichzeitig aktiv sein kann, sollten Sie das Datenbankschema ändern und eine separate Variable activeUserId erstellen, anstatt alle unnötigen Payload enthalten zu lassen (und die Form des Redux-Speichers entsprechend ändern).

Verwandte Themen