236 votes

Est-il possible de retourner vide dans la fonction de rendu de React?

J'ai un composant de notification, et j'ai un paramètre de délai d'attente pour cela. Après le délai d'attente, j'appelle this.setState({isTimeout:true}).

Ce que je veux faire, c'est que si le délai est déjà écoulé, je veux juste ne rien afficher :

render() {
  let finalClasses = "" + (this.state.classes || "");
  if (isTimeout){
    return (); // ici il y a une erreur de syntaxe
  }
  return ({this.props.children});
}

Le problème est :

return (); // ici il y a une erreur de syntaxe

396voto

Mayank Shukla Points 39317

Oui, vous pouvez le faire, mais au lieu de laisser vide, il suffit de retourner null si vous ne voulez rien rendre du composant, comme ceci :

return (null);

Un autre point important est que, à l'intérieur de JSX, si vous rendez un élément conditionnellement, alors dans le cas où condition=false, vous pouvez retourner l'une de ces valeurs false, null, undefined, true. Selon la DOC:

booleans (true/false), null, and undefined sont des enfants valides, ils seront ignorés, ce qui signifie qu'ils ne seront tout simplement pas rendus.

Toutes ces expressions JSX se rendront de la même manière :

Exemple :

Seules les valeurs impaires seront rendues, car pour les valeurs paires, nous retournons null.

const App = ({ number }) => {
  if(number%2) {
    return (

        Number: {number}

    )
  }

  return (null);           //===> remarquez ici, en retournant null pour les valeurs paires
}

const data = [1,2,3,4,5,6];

ReactDOM.render(

    {data.map(el => )}
  ,
  document.getElementById('app')
)

11 votes

Pourquoi renvoyez-vous (null) et non simplement null?

10 votes

@wederer il n'y a pas de différence entre return null et return (null) ils sont identiques :)

1 votes

Mais de toute façon, vous ne pouvez pas simplement sortir de votre fonction (ce qui revient au même que de retourner indéfini). Si vous n'avez pas de return, React affiche une erreur. Donc le return null est nécessaire.

45voto

jhujhul Points 146

Certaines réponses sont légèrement incorrectes et indiquent la mauvaise partie de la documentation :

Si vous voulez qu'un composant ne rende rien, il suffit de retourner null, selon la doc :

Dans de rares cas, vous pouvez vouloir qu'un composant se cache même s'il a été rendu par un autre composant. Pour ce faire, retournez null au lieu de sa sortie de rendu.

Si vous essayez de retourner undefined, par exemple, vous obtiendrez l'erreur suivante :

Aucun élément n'a été rendu. Cela signifie généralement qu'une instruction return est manquante. Ou, pour ne rien afficher, retournez null.

Comme l'ont souligné d'autres réponses, null, true, false et undefined sont des enfants valides utiles pour le rendu conditionnel à l'intérieur de votre jsx, mais si vous voulez que votre composant se cache / ne rende rien, il suffit de retourner null.

EDIT React 18 :

React 18 permettra de rendre undefined au lieu de générer une erreur. Consultez cet annonce.

19voto

Shubham Khatri Points 67350

Oui, vous pouvez retourner une valeur vide à partir d'une méthode de rendu React.

Vous pouvez retourner l'un des éléments suivants: false, null, undefined, ou true

Conformément à la documentation:

false, null, undefined, et true sont des enfants valides. Ils ne sont simplement pas rendus.

Vous pourriez écrire

return null; ou
return false; ou
return true; ou
return {undefined}; 

Cependant, return null est le plus préféré car il signifie qu'aucune valeur n'est retournée

5 votes

Retourner undefined est incorrect. cela renverrait une erreur. Au lieu de cela, renvoyer

{undefined}

est la bonne façon.

2 votes

@jaydhawan retourner null est la manière recommandée. Et oui, retourner undefined donnera une erreur donc cette réponse est incorrecte.

0 votes

@jaydhawan le problème avec cette approche est qu'elle va créer un élément div "réel".

7voto

Chris Kobrzak Points 160

Légèrement hors-sujet mais si vous avez déjà besoin d'un composant basé sur une classe qui ne rend jamais rien et que vous êtes heureux d'utiliser une syntaxe ES encore non standardisée, vous pouvez utiliser :

render = () => null

Il s'agit essentiellement d'une méthode de flèche qui nécessite actuellement le plugin Babel transform-class-properties. React ne vous permettra pas de définir un composant sans la fonction render et c'est la forme la plus concise qui satisfait cette exigence à laquelle je peux penser.

J'utilise actuellement ce tour de passe-passe dans une variante de ScrollToTop empruntée à la documentation de react-router. Dans mon cas, il n'y a qu'une seule instance du composant et il ne rend rien, donc une forme abrégée de "render null" s'intègre bien.

1 votes

Le code a déjà été terminé, mais j'aime ce style, il semble être le code le plus simple.

6voto

Fatih Bulut Points 197

Si vous utilisez Typescript et que votre composant/fonction a un type de retour React.Element, vous obtiendrez l'erreur suivante.

Type 'null' n'est pas assignable au type 'ReactElement'.

La solution est React.Fragment.

return 

ou

return <>

0 votes

Selon cette règle eslint, les fragments vides ne sont pas conseillés github.com/yannickcr/eslint-plugin-react/blob/master/docs/ru‌​les/…

0 votes

Null est aussi plus performant. Avec null, il n'y a rien à traiter pour react, il passe simplement à autre chose. Un fragment doit être traité, même s'il n'est pas très important.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X