Je viens d'obtenir peu de choses sur une tâche assez simple. S'excuser à l'avance si cette question est déjà répondue. Je ne peux tout simplement pas le trouver. J'ai eu des objets dans l'état et je dois mettre à jour "touché" sur true et "errorormsg" à un texte uniquement si "valide" dans l'objet égal à false p> J'ai réussi à filtrer toutes les clés d'objet avec une valeur "valide" égale à false p> maintenant, j'ai besoin de boucler chaque "InvalidInputs" et de la mise à jour touchée sur true et "errorormsg" à un texte spécifique. J'ai essayé p> mais cela ne fonctionne pas évidemment. Quelqu'un peut-il me donner une belle solution ou diriger-moi à une réponse? p> Merci d'avance p> p>
3 Réponses :
Utilisez p> pour..in code> pour boucler l'objet et cochez la valeur de valide code> let state = {
controls: {
email: {
elementConfig: {
type: 'email'
},
placeholder: 'Email Address',
value: '',
validation: {
required: true,
isEmail: true
},
valid: false,
touched: false,
errorMsg: ""
},
password: {
elementConfig: {
type: 'password'
},
placeholder: 'Password',
value: '',
validation: {
required: true,
minLength: 6
},
valid: false,
touched: false,
errorMsg: ""
}
},
};
for (let keys in state.controls) {
if (!state.controls[keys].valid) {
state.controls[keys].errorMsg = 'New Msg';
state.controls[keys].touched = true;
}
}
console.log(state)
Merci mec ... c'est ce dont j'avais besoin et je ne comprends pas où suis-je perdu. Merci encore
Vous pouvez utiliser p> mapper () code> et modifier l'objet en fonction des besoins au lieu d'utiliser le filtre () code>. let state = {
controls: {
email: {
elementConfig: {
type: 'email'
},
placeholder: 'Email Address',
value: '',
validation: {
required: true,
isEmail: true
},
valid: false,
touched: false,
errorMsg: ""
},
password: {
elementConfig: {
type: 'password'
},
placeholder: 'Password',
value: '',
validation: {
required: true,
minLength: 6
},
valid: false,
touched: false,
errorMsg: ""
}
},
};
let result = Object.keys(state.controls)
.map((con) => (!state.controls[con].valid ?
({...state.controls[con],errorMsg:"New msg",touched:true}) :
({...state.controls[con],touched:true})))
console.log(result);
Merci Maheer Ali pour cette solution aussi ... mais la première solution est plus décente.
@ ptr.chov oui c'est. Mais prenez soin de pouvoir muté l'objet d'origine
Ouais en particulier l'état immuable est souhaité dans réagir
Bonjour @Maheer Ali je l'ai essayé, mais malheureusement variable "Résultat" renvoie un tableau d'objets qui, lorsque je mettez à jour l'état avec IT SetState ({contrôles: résultat}) modifier les objets d'origine dans un tableau. Y a-t-il une autre façon de le faire?
@ ptr.chov pourquoi vous n'utilisez pas la méthode BRK?
@Maheer Ali Pouvez-vous préciser ce que vous vouliez dire par BRK Methethy?
L'autre réponse à votre question. Qui a 4 upvotes
Je voulais juste poster une solution qui fonctionne pour moi qui est la même que la première solution mais sans l'état de mutation
Voulez-vous que seuls les contrôles
filtrés code> après le résultat de tous?Non, je voulais mettre à jour les propriétés dans l'état