2017-05-18 1 views
0

Also werde ich direkt auf den Punkt gehen. Ich erhalte diese Daten von api:Validierung der abgerufenen Daten von API Redux React

[ 
{ 
    id: 123, 
    email: [email protected] 
}, 
{ 
    id: 456, 
    email: asdasd.com 
}, 
{ 
    id: 789, 
    email: [email protected] 
}, 
... 

]

und ich möchte E-Mail bestätigen und zeigen diese alle Informationen in einer Liste, so etwas wie folgt aus:

  1. [email protected] - gültig
  2. asdasd.com - ungültig
  3. asd asd @ - ungültig ...

Meine Frage ist, was ist die beste Möglichkeit, Validierungsdaten in einem Geschäft zu speichern? Ist es besser, etwas wie "isValid" -Eigenschaft von jeder E-Mail zu haben? Ich meine, wie folgt aus:

store = { 
emailsById: [ 
    123: { 
     value: [email protected], 
     isValid: true 
    }, 
    456: { 
     value: asdasd.com, 
     isValid: false 
    }, 
    789: { 
     value: [email protected], 
     isValid: false 
    } 
    ... 
] 

}

oder etwas ähnliches:

store = { 
emailsById: [ 
    123: { 
     value: [email protected] 
    }, 
    456: { 
     value: asdasd.com 
    }, 
    789: { 
     value: [email protected] 
    } 
    ... 
], 
inValidIds: ['456', '789'] 

}

was ist besser? Oder gibt es vielleicht noch einen besseren Weg, solche Daten auf Lager zu haben? Haben Sie daran, dass es Tausende von E-Mails in einer Liste sein kann :)

Vielen Dank im Voraus für die Antworten;)

+1

Ich denke, es hängt wirklich davon ab, was Sie mit diesen Daten tun. Ich würde wahrscheinlich alles zusammenhalten, so dass Sie filtern und sortieren können, wie benötigt. Zum Beispiel, wenn Sie sie in separaten Arrays haben, dann müssen Sie concat sie die Liste nach E-Mail-Adresse oder einem anderen Feld sortieren. – JellyKid

+0

Ja, ich verstehe, dass ich meine Daten in beiden Richtungen speichern kann. aber meine Frage ist, welcher Weg ist der richtige Weg? Wie speichern Menschen normalerweise Daten in Redux-Stores? Ich bin neu bei allen Redux-Sachen, also versuche ich einfach "den richtigen Weg" vom Anfang an zu gehen. :) – tdk

Antwort

0

Ich empfehle den Artikel „Vermeidung unbeabsichtigter Komplexität Wenn Ihre App Staat Strukturierung“ Lesen von Tal Kol, die genau Ihr Problem antwortet: https://hackernoon.com/avoiding-accidental-complexity-when-structuring-your-app-state-6e6d22ad5e2a

Ihr Beispiel ist recht Einfach und alles hängt wirklich von Ihren Bedürfnissen ab, aber persönlich würde ich mit so etwas gehen (basierend auf verlinktem Artikel):

var store = { 
    emailsById: { 
    123: { 
     value: '[email protected]', 
    }, 
    456: { 
     value: '[email protected]xample.com', 
    }, 
    789: { 
     value: '[email protected]', 
    }, 
    // ... 
    }, 
    validEmailsMap: { 
    456: true, // true when valid 
    789: false, // false when invalid 
    }, 
}; 
0

Zunächst einmal so, wie Sie ein Array in Javascript definiert ist falsch. Was Sie brauchen, ist ein Array von Objekten wie,

emails : [ 
 
    { 
 
    id: '1', 
 
    email: '[email protected]', 
 
    isValid: true 
 
    }, 
 
    { 
 
    id: '2', 
 
    email: 'abc.com', 
 
    isValid: false; 
 
    } 
 
];

wenn Sie den Zugriff auf E-Mail eine ID basiert tun müssen, erhalten Sie eine ID-Eigenschaft zusammen mit E-Mail und isValid hinzufügen können. uuid ist ein guter Weg, um darüber zu gehen.

Abschließend hängt es von Ihrem Anwendungsfall ab.

Ich glaube, das obige Beispiel ist ein guter Weg, um Daten im Speicher zu halten, weil es einfach ist.

Was Sie in Ihrem zweiten Beispiel beschrieben ist, wie zwei verschiedene Zustände aufrechterhalten wird. Ich würde das nicht empfehlen.

+0

gut danke für die Antwort. :) und in Bezug auf die Korrektheit des Arrays ist es eigentlich nicht der Punkt, "ID" ist auch nicht der Punkt hier. Meine Frage ist, wie ist die richtige Art der Speicherung von Daten in einem Geschäft? Mein Beispiel ist nur ein einfaches Beispiel, es gibt mehr Daten. Am Ende sollte es so etwas wie eine Tabelle mit jeder Zelle validiert sein. Es wird so etwas sein: id | E-Mail | Datum | Benutzer | url und jeder dieser Werte sollte validiert werden, bevor sie in einer Liste angezeigt werden. und ich verstehe, dass ich meine Daten auf beide Arten speichern kann, aber welche ist die "richtige" Art, Daten in einem Geschäft zu haben? :) – tdk

+0

Sie haben sich eigentlich geirrt, das ist eine vollkommen gültige und gebräuchliche Verwendung für die Initialisierung von Arrays –

0

So Ihre beste Möglichkeit wäre, eine separate Datei zu erstellen, die alle Ihre Validierungen Methoden enthalten. Importieren Sie das in die von Ihnen verwendete Komponente und dann, wenn Sie die Logik für gültig/ungültig verwenden möchten.

Wenn es etwas ist, das Sie von Anfang an in den Speicher legen möchten und die Daten sich niemals in einem Übergangszustand befinden, können Sie Ihr DTO über eine Array-Map in Ihrem Reduzierer parsen, wenn Sie die Antwort von Ihrer API erhalten .

export default function (state = initialState, action) { 
    const {type, response} = action 

    switch (type) { 
     case DATA_RECIEVED_SUCCESS: 
      const items = [] 

      for (var i = 0; i < response.emailsById.length; i++) { 
       var email = response.emailsById[i]; 

       email.isValid = checkEmailValid(email) 

       items.push(email) 
      } 

      return { 
       ...state, 
       items 
      } 
    } 
} 

Aber meine Vorliebe wäre, immer im letzten Moment zu überprüfen, die Sie benötigen. Es macht es zu einem sichereren Design für den Fall, dass Sie feststellen, dass Sie Ihr Design in Zukunft ändern müssen.Auch wird die Validierungslogik heraus Trennung machen es mehr prüfbar

Verwandte Themen