{ } 内可以放任何 JS 表达式,但不能直接写 if/for 语句——这是初学者最容易踩的坑。条件"> { } 内可以放任何 JS 表达式,但不能直接写 if/for 语句——这是初学者最容易踩的坑。条件"> { } 内可以放任何 JS 表达式,但不能直接写 if/for 语句——这是初学者最容易踩的坑。条件">
React 词条目录
前端Wiki/React/基础/JSX 语法

表达式与条件渲染

JSX 中 { } 内可以放任何 JS 表达式,但不能直接写 if/for 语句——这是初学者最容易踩的坑。条件渲染的固定套路:&& 做开关、三元表达式做二选一、把复杂分支抽成函数或提前 return。

渲染 false、null、undefined 时什么都不显示,因此 {count > 0 && <p>有</p>} 是最常用的“有才显示”写法。注意 {0 && ...} 会渲染出数字 0——做判断时显式转布尔。

  • { } 里放表达式(变量、三元、函数调用),不能放 if/for 语句
  • && 用于“真才显示”,三元用于“二选一”,多分支用函数 + 提前 return
  • false / null / undefined 不渲染,但 0 和空字符串会
HTML
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>条件渲染</title>
<script src="https://unpkg.com/react@18/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
const { useState } = React;

function App() {
  const [logined, setLogined] = useState(false);
  const [role, setRole] = useState('guest');
  const [count, setCount] = useState(0);

  // 复杂判断:抽成函数,内部随便写 if 语句
  function desc() {
    if (role === 'admin') return '管理员:什么都能看';
    if (role === 'vip')   return 'VIP:能看会员内容';
    return '游客:只能看公开内容';
  }

  return (
    <div style={{ padding: 16 }}>
      {/* 三元:二选一 */}
      {logined ? <button onClick={() => setLogined(false)}>退出登录</button>
               : <button onClick={() => setLogined(true)}>去登录</button>}

      <p>角色:{role}</p>
      <select value={role} onChange={e => setRole(e.target.value)}>
        <option value="guest">游客</option>
        <option value="vip">VIP</option>
        <option value="admin">管理员</option>
      </select>

      {/* && 开关 */}
      {logined && <p>✅ 欢迎回来,{desc()}</p>}

      {/* 经典翻车现场:0 会显示出来 */}
      <button onClick={() => setCount(count - 1)}>-1</button>
      {count > 0 && <p>有 {count} 条新消息</p>}
      {count <= 0 && <p>没有新消息</p>}
    </div>
  );
}

ReactDOM.createRoot(document.getElementById('root')).render(<App />);
</script>
</body>
</html>
本节要点条件渲染三件套:&& 开关、三元二选一、复杂逻辑抽函数提前 return;小心 0 被渲染。
🔗 相关词条JavaScriptHTMLHTML5