React

description: Bibliotèque React JS

lang: FR

Philosophie

Introduction

Version notables

Architecture

                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚                   β”‚
                        β”‚  React Component  β”‚
     Props  ──────────► β”‚                   β”‚ ──────────►   render
                        β”‚  - State          β”‚
                        β”‚                   β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Props

class Cat extends React.Component {
  render() {
    return <h1>{this.props.name} section</h1>;
  }
}

class App extends React.Component {
  render() {
  return (
    <div>
     <Cat name=”Jim” />
    </div>
  );
  }
}

States

class Cat extends React.Component {

 constructor(props) {
   super(props);
   this.state = {
	name: β€œJim”
   };
 }

  render() {
    return <div>{ this.state.name }</div>;
  }
}

Nouvelle version

class Cat extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

devient

function Cat(props) {
    return <h1>Hello, {props.name}</h1>;
}

Cycle de Vie


             β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
             β”‚                         β”‚    β”‚                      β”‚   β”‚                        β”‚
             β”‚   Mounting              β”‚    β”‚   Updating           β”‚   β”‚ Unmounting             β”‚
             β”‚                         β”‚    β”‚                      β”‚   β”‚                        β”‚
             β”‚                         β”‚    β”‚                      β”‚   β”‚     β”‚                  β”‚
             β”‚   Constructor           β”‚    β”‚                      β”‚   β”‚     β”‚                  β”‚
             β”‚                         β”‚    β”‚                      β”‚   β”‚     β”‚                  β”‚
             β”‚         β”‚               β”‚    β”‚                      β”‚   β”‚     β”‚                  β”‚
             β”‚         β”‚               β”‚    β”‚                      β”‚   β”‚     β”‚                  β”‚
             β”‚         β”‚               β”‚    β”‚                      β”‚   β”‚     β”‚                  β”‚
             β”‚         β”‚               β”‚    β”‚                      β”‚   β”‚     β”‚                  β”‚
             β”‚    β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚   β”‚     β”‚                  β”‚
             β”‚    β”‚                    β”‚    β”‚             β”‚        β”‚   β”‚     β”‚                  β”‚
             β”‚    β”‚           render   β”‚    β”‚             β”‚        β”‚   β”‚     β”‚                  β”‚
             β”‚    β”‚                    β”‚    β”‚             β”‚        β”‚   β”‚     β”‚                  β”‚
             β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜        β”‚   β”‚     β”‚                  β”‚
             β”‚             β”‚           β”‚    β”‚        β”‚             β”‚   β”‚     β”‚                  β”‚
             β”‚             β”‚           β”‚    β”‚        β”‚             β”‚   β”‚     β–Ό                  β”‚
             β”‚             β–Ό           β”‚    β”‚        β–Ό             β”‚   β”‚                        β”‚
             β”‚                         β”‚    β”‚                      β”‚   β”‚                        β”‚
             β”‚   ComponentDidMount     β”‚    β”‚ ComponentDidUpdate   β”‚   β”‚  ComponentDidUnmount   β”‚
             β”‚                         β”‚    β”‚                      β”‚   β”‚                        β”‚
             β”‚                         β”‚    β”‚                      β”‚   β”‚                        β”‚
             β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜


Code

Fragments

<>
    /* Mon code */
</>

est Γ©quivalent Γ 

<Fragment>
/* Mon code */
</Fragment>

Keys

Get Started

Pour crΓ©er une app React avec npx, on utilise Create React App (CRA) :

  npx create-react-app front --template typescript
  cd front
  npm start

Router


Context

Les Context permettent de partager des données en profondeur dans l'arbre sans avoir besoin de passer les éléments à travers les props. Il possède deux éléments clefs:


Redux


Test

React Testing Library (RTL)

Smoke test

Snapshot test

Mock test


Formulaire

Uncontrolled vs controlled component

Uncontrolled

Pour faire un uncontrolled, on dΓ©finit une rΓ©fΓ©rence que l'on donne en attribut :

// Valeur de input est accessible via nameInputRef.current.value
// Nous devons utiliser defaultValue pour initialiser l'input
function NameFormUncontrolled({defaultValue}: {defaultValue: string}) {
  const nameInputRef = useRef<HTMLInputElement>(null);
  return (
    <div>
      <input defaultValue={defaultValue} ref={nameInputRef} placeholder="name" />
    </div>
  );

Controlled

function NameFormControlled() {
  const [name, setName] = useState("");
  return (
    <div>
      <input
        onChange={(inputEvent) => setName(inputEvent.target.value)}
        defaultValue={name}
      />
    </div>
  );
}

React Hook Form

Il s'agit d"une bibliotèque permettant de construire un formulaire sans avoir trop de code redondant.

npm install react-hook-form