Wat zijn Conditionals?

Soms wil je bepaalde content alleen tonen als aan een voorwaarde is voldaan. Bijvoorbeeld:

  • Toon "Welkom terug!" als de gebruiker is ingelogd
  • Toon een "Login" button als de gebruiker NIET is ingelogd
  • Toon een error bericht als er iets mis gaat

Twee manieren in React:

  1. Ternary operator (? :) - als je twee opties hebt (if/else)
  2. Logical AND (&&) - als je iets alleen wilt tonen (if)

Methode 1: Ternary Operator (? :)

Gebruik de ternary operator wanneer je twee verschillende dingen wilt tonen:

import { useState } from 'react';

const WelcomeMessage = () => {
  const [isLoggedIn, setIsLoggedIn] = useState(false);

  return (
    <div>
      {isLoggedIn ? <h1>Welkom terug!</h1> : <h1>Log eerst in</h1>}
      
      <button onClick={() => setIsLoggedIn(!isLoggedIn)}>
        {isLoggedIn ? "Uitloggen" : "Inloggen"}
      </button>
    </div>
  );
};

export default WelcomeMessage;

Leeswijze:

conditie ? (als true) : (als false)

Als isLoggedIn waar is, toon "Welkom terug!", anders toon "Log eerst in".

Meer Voorbeelden

// Toon verschillende tekst
{age >= 18 ? <p>Volwassen</p> : <p>Minderjarig</p>}

// Toon verschillende classes
<div className={isActive ? "active" : "inactive"}>
  Content
</div>

// Toon verschillend component
{hasData ? <DataList /> : <EmptyState />}

Methode 2: Logical AND (&&)

Gebruik && wanneer je iets alleen wilt tonen als voorwaarde waar is:

import { useState } from 'react';

const ErrorMessage = () => {
  const [error, setError] = useState('');

  return (
    <div>
      <button onClick={() => setError('Er ging iets mis!')}>
        Trigger Error
      </button>
      
      {error && <p style={{ color: 'red' }}>{error}</p>}
    </div>
  );
};

Leeswijze:

conditie && (toon dit)

Als error waar is (niet leeg), toon de error message.

Meer Voorbeelden

// Toon element alleen als voorwaarde waar is
{isLoggedIn && <p>Welkom terug!</p>}

// Toon loading indicator
{isLoading && <p>Loading...</p>}

// Toon lijst alleen als er items zijn
{items.length > 0 && <ul>{items.map(...)}</ul>}

Let op met 0 en false:

// Fout: Als count 0 is, toont het "0"!
{count && <p>Count: {count}</p>}

// Goed: Gebruik vergelijking
{count > 0 && <p>Count: {count}</p>}

Praktische Voorbeelden

Loading State

const Users = () => {
  const [isLoading, setIsLoading] = useState(true);
  const [users, setUsers] = useState([]);

  return (
    <div>
      {isLoading ? (
        <p>Loading users...</p>
      ) : (
        <ul>
          {users.map(user => <li key={user.id}>{user.name}</li>)}
        </ul>
      )}
    </div>
  );
};

Error + Success

const Form = () => {
  const [error, setError] = useState('');
  const [success, setSuccess] = useState(false);

  return (
    <div>
      {error && <p style={{ color: 'red' }}>{error}</p>}
      {success && <p style={{ color: 'green' }}>Opgeslagen!</p>}
      
      <button>Submit</button>
    </div>
  );
};

Geneste Conditionals

const Dashboard = () => {
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  const [isAdmin, setIsAdmin] = useState(false);

  return (
    <div>
      {isLoggedIn ? (
        isAdmin ? (
          <AdminPanel />
        ) : (
          <UserPanel />
        )
      ) : (
        <LoginForm />
      )}
    </div>
  );
};

Lege Lijst Afhandelen

const TodoList = () => {
  const [todos, setTodos] = useState([]);

  return (
    <div>
      {todos.length > 0 ? (
        <ul>
          {todos.map(todo => <li key={todo.id}>{todo.text}</li>)}
        </ul>
      ) : (
        <p>Geen todos gevonden. Voeg er een toe!</p>
      )}
    </div>
  );
};

Tips & Regels

  • Ternary voor if/else: Gebruik ? : als je twee opties hebt
  • AND voor if: Gebruik && als je iets alleen wilt tonen
  • Pas op met 0: 0 && <div> toont "0" op je scherm!
  • Leesbaarheid: Bij complexe conditionals, gebruik variabelen

Complex vs Simpel

Complex (moeilijk te lezen):

{user && user.isLoggedIn && user.hasAccess && user.role === 'admin' && <AdminPanel />}

Simpel (beter leesbaar):

const canViewAdmin = user && user.isLoggedIn && 
                     user.hasAccess && user.role === 'admin';

return (
  <div>
    {canViewAdmin && <AdminPanel />}
  </div>
);