Fonctionnalités avancées

Contexte

Provider et consumer

  1. Créer le contexte

     const UserContext = React.createContext("Bob");
    
  2. Définir le provider.

     class App extends Component {
       render() {
         return <div className="App">
           <UserContext.Provider>
             <Child />
           <UserContext.Provider>
         </div>
       }
     }
    

    On peut surcharger la valeur par défaut:

     <UserContext.Provider value="Alice">
    
  3. Consommer la valeur du contexte.
    Le consumer permet de récupérer les valeurs du provider associé parmis les ancêtres du composant.

     class Child extends Component {
       render() {
         return <SubChild />;
       }
     }
     class SubChild extends Component {
       render() {
         return <SubSubChild />;
       }
     }
     class SubSubChild extends Component {
       render() {
         return <UserContext.Consumer>
             {(username) => <div>Hello {username}</div>}
           </UserContext.Consumer>;
       }
     }
    

    On peut ainsi consommer différents contextes:

     function Content() {
       return (
         <ThemeContext.Consumer>{theme => {
           <UserContext.Consumer>{user => {
    
             <ProfilePage user={user} theme={theme} />
    
           }}</UserContext>
         }}</ThemeContext.Consumer>
       );
     }
    

this.context

Cette approche ne fonctionne que pour les composants en classe, et il ne peut y avoir qu’un seul contexte.

  1. Créer le contexte

     const UserContext  = React.createContext({ username: "Bob" });
    
  2. Définir le type de contexte de la classe

     Child.contextType = UserContext;
    

    ou

     class Child extends Component {
       static contextType = UserContext
     }
    
  3. Lire this.context

     class Child extends Component {
       render() {
         return <div>{this.context.username}</div>
       }
     }
    

PureComponent

Memoize


Refs

createRef

Ref callback

Ref forwarding


Fragments


Portal

JSFiddle portal


Lazy loading


Error Boundary


Patterns

Higher Order Component (HOC)

Render props