0
votes

Mettre à jour des propriétés spécifiques dans un objet spécifique

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 xxx

et je dois mettre à jour "touché" sur true et "errorormsg" à un texte uniquement si "valide" dans l'objet égal à false

J'ai réussi à filtrer toutes les clés d'objet avec une valeur "valide" égale à false xxx

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é xxx

mais cela ne fonctionne pas évidemment. Quelqu'un peut-il me donner une belle solution ou diriger-moi à une réponse?

Merci d'avance


2 commentaires

Voulez-vous que seuls les contrôles filtrés après le résultat de tous?


Non, je voulais mettre à jour les propriétés dans l'état


3 Réponses :


4
votes

Utilisez pour..in code> pour boucler l'objet et cochez la valeur de valide code>

p>

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)


1 commentaires

Merci mec ... c'est ce dont j'avais besoin et je ne comprends pas où suis-je perdu. Merci encore



0
votes

Vous pouvez utiliser mapper () code> et modifier l'objet en fonction des besoins au lieu d'utiliser le filtre () code>.

p>

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);


7 commentaires

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



0
votes

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 xxx


0 commentaires