0
votes

Composant non renoncé à réagir

  const { contacts, getContacts, } = useContext(
    ContactContext
  );

  useEffect(() => {
    getContacts();
    //eslint-disable-next-line
  });

  //prettier-ignore
  return (
    <Fragment>
      {contacts.length === 0 ? (
        <h4 style={{ textAlign: 'center' }}>Please add a contact</h4>
      ): null}
      {contacts.map(contact => (
          <ContactItem contact={contact} />

      ))}
    </Fragment>
  );
};
contacts is initially an empty array and after getContacts makes the request to the server, it updates the contacts state 
but somehow the words 'Please add a contact' is always showing even after getContacts() returns an array with a few contacts. it seems like it does not re-render that part of the component because when the component initially ran, contacts was an empty array 

6 commentaires

Pouvez-vous compliquer la mise en œuvre getContacts?


Où sont les contacts mis à jour?


Utilisez-vous usestate?


@ Budaörs, je n'utilise pas usestate


@Chithambarakumar, getContacts appelle le serveur et met à jour les contextes de l'état avec un nouveau tableau de tous les contacts


@Meilechwieder Je pense que l'usestate d'ici aurait une excellente utilisation. Voulez-vous que je vous explique comment utiliser ici usestate?


3 Réponses :


2
votes

En ce qui concerne "pourquoi / ne sera pas ma mise à jour de la composante", réagit de trois règles simples. Il ne "rendant" que votre composant si:

  • ses accessoires changent li>
  • Son état change LI>
  • Son contexte change Li> ul>

    Pour ces deux derniers, il est critique em> que vous les modifiez correctement, à l'aide de la méthode Setter appropriée. Par exemple, si vous utilisez l'état via des crochets (par rapport à l'état basé sur la classe), c'est-à-dire. P> xxx pré>

    vous avez em> utiliser SETFOO CODE>: P>

    foo = newValue;
    


0 commentaires

1
votes

Veuillez utiliser Hook appelé usestate xxx


0 commentaires

0
votes

La seule chose qui a fonctionné était ceci, mais je ne sais pas pourquoi il n'a pas fonctionné auparavant et pourquoi cela fonctionne maintenant:

if(contacts.length === 0 ){
      return <h4>Please add a contact</h4>
}


0 commentaires