Hello World - 计数器与API请求

知识库
知识库文档
/tech-stacks/react/examples/Hello World - 计数器与API请求.md

文档

React 计数器 + 随机用户 API

目标

用 React Hooks(useStateuseEffect)实现计数器,并调用免费 API 获取随机用户信息。

完整代码

src/App.tsx

import { useState, useEffect } from 'react'

interface User {
  name: { first: string; last: string }
  email: string
  picture: { large: string }
}

export default function App() {
  const [count, setCount] = useState(0)
  const [user, setUser] = useState<User | null>(null)
  const [loading, setLoading] = useState(false)

  async function fetchUser() {
    setLoading(true)
    try {
      const res = await fetch('https://randomuser.me/api/')
      const data = await res.json()
      setUser(data.results[0])
    } finally {
      setLoading(false)
    }
  }

  useEffect(() => { fetchUser() }, [])

  return (
    <div style={styles.container}>
      <h1>⚛️ React 入门示例</h1>

      {/* 计数器 */}
      <div style={styles.card}>
        <h2>计数器: {count}</h2>
        <div style={styles.buttons}>
          <button onClick={() => setCount(c => c - 1)} style={styles.btn}>-1</button>
          <button onClick={() => setCount(0)} style={styles.btn}>重置</button>
          <button onClick={() => setCount(c => c + 1)} style={styles.btn}>+1</button>
        </div>
      </div>

      {/* 随机用户 */}
      <div style={styles.card}>
        <h2>随机用户</h2>
        {loading && <p>加载中...</p>}
        {user && (
          <div style={{ textAlign: 'center' }}>
            <img src={user.picture.large} alt="avatar" style={styles.avatar} />
            <p><strong>{user.name.first} {user.name.last}</strong></p>
            <p style={{ color: '#666' }}>{user.email}</p>
          </div>
        )}
        <button onClick={fetchUser} style={styles.btn}>换一个</button>
      </div>
    </div>
  )
}

const styles: Record<string, React.CSSProperties> = {
  container: { maxWidth: 420, margin: '2rem auto', fontFamily: 'system-ui' },
  card: { border: '1px solid #e5e7eb', borderRadius: 12, padding: 20, marginBottom: 16 },
  buttons: { display: 'flex', gap: 8, marginTop: 8 },
  btn: { padding: '8px 16px', background: '#3b82f6', color: '#fff', border: 'none', borderRadius: 6, cursor: 'pointer' },
  avatar: { width: 80, height: 80, borderRadius: '50%', marginBottom: 8 },
}

运行

npm install &;& npm run dev

预期输出

页面显示:

  • 计数器卡片,可加减和重置
  • 随机用户卡片,显示头像/姓名/邮箱,可点击换一个

信息

路径
/tech-stacks/react/examples/Hello World - 计数器与API请求.md
更新时间
2026/5/30