Je veux changer l'état booléen en fonction de la valeur est passée

class Home extends Component {
  constructor(props) {
    super(props);
    this.state = {
      formElement: {
        home: true,
        booth: false,
        summary: false
      },
    };
  }

  buttonClickHandler(event, nextView) {  //nextView == summary
    // nextView == summary then summary would be true and booth would be flase and home would flase too
  }
}

Here based on nextView all state value should be reserved.

Thanks in advance..!!
0
Vishal Tanna 14 oct. 2020 à 17:41

1 réponse

Meilleure réponse

Considérant que vous recevez nextView comme home/booth/summary et sur cette base, vous souhaitez définir la clé correspondante, c'est-à-dire formElement[nextView] = true et pour les autres clés, c'est-à-dire formElement[!nextView] = false.

Vous pouvez essayer de suivre:

buttonClickHandler (event, nextView) {  
  const { formElement } = this.state;
  Object.keys(formElement).forEach(key => {
     this.setState({
       formElement: {
         ...formElement,
         [key]: key === nextView  // here will check if the current key matches nextView
       }
     });
  });
}

En passant, je pense que vous pourriez utiliser une variable d'état plus simple, si possible. Comme

this.state = {
      formElement: 'home'
};

Ensuite

 buttonClickHandler (event, nextView) {  
      this.setState({
        formElement: nextView
      });
   }

C'est juste une pensée pour https://en.wikipedia.org/wiki/KISS_principle.

1
Tuhin 14 oct. 2020 à 15:22