← 返回
Sandpack 代码演示组件
2025-08-25
Sandpack 是由 CodeSandbox 团队开发的一套组件工具包,用于创建实时运行的代码编辑体验。它允许我们在网页中嵌入一个完整的代码环境,支持多种框架和模板。
基础 Hello World 示例
这是一个最简单的 React Hello World 示例,你可以直接在下面的编辑器中修改代码并看到实时效果:
export default function App() { return ( <div style={{ fontFamily: 'Arial, sans-serif', textAlign: 'center', padding: '50px', background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)', minHeight: '100vh', color: 'white' }}> <h1 style={{ fontSize: '3em', marginBottom: '20px' }}> Hello World! 👋 </h1> <p style={{ fontSize: '1.2em', marginBottom: '30px' }}> 欢迎来到 Sandpack 代码演示! </p> <button onClick={() => alert('你好!这是一个可交互的代码示例')} style={{ padding: '12px 24px', fontSize: '1.1em', border: 'none', borderRadius: '25px', background: '#ff6b6b', color: 'white', cursor: 'pointer', boxShadow: '0 4px 15px rgba(0,0,0,0.2)' }} > 点击我! </button> </div> ); }
特性介绍
🎯 核心特性
- 实时预览:代码修改后立即看到效果
- 多种模板:支持 React、Vue、Angular、Vanilla JS 等
- 在线编辑:完整的代码编辑器体验
- 依赖管理:自动处理 npm 包依赖
- 主题定制:支持多种主题和自定义样式
🚀 使用场景
- 技术博客:展示代码示例和教程
- 文档网站:提供交互式 API 演示
- 在线教育:创建编程练习和课程
- 代码分享:快速分享可运行的代码片段
进阶示例
带依赖的组件示例
下面展示一个使用外部依赖的更复杂示例:
import { format } from 'date-fns'; import { useState } from 'react'; export default function App() { const [date, setDate] = useState(new Date()); return ( <div style={{ fontFamily: 'Arial, sans-serif', textAlign: 'center', padding: '40px', background: 'linear-gradient(45deg, #ff9a9e 0%, #fecfef 50%, #fecfef 100%)', minHeight: '100vh', color: '#333' }}> <h2>📅 日期格式化示例</h2> <p>使用 date-fns 库格式化日期</p> <div style={{ margin: '20px 0' }}> <p><strong>当前时间:</strong></p> <p style={{ fontSize: '1.5em', color: '#e74c3c' }}> {format(date, 'yyyy年MM月dd日 HH:mm:ss')} </p> </div> <button onClick={() => setDate(new Date())} style={{ padding: '10px 20px', fontSize: '1em', border: 'none', borderRadius: '20px', background: '#3498db', color: 'white', cursor: 'pointer', margin: '5px' }} > 刷新时间 </button> <div style={{ marginTop: '30px' }}> <h3>不同格式:</h3> <ul style={{ listStyle: 'none', padding: 0 }}> <li>📋 ISO: {format(date, 'yyyy-MM-dd')}</li> <li>📅 中文: {format(date, 'yyyy年MM月dd日')}</li> <li>⏰ 时间: {format(date, 'HH:mm:ss')}</li> <li>🌍 英文: {format(date, 'MMMM do, yyyy')}</li> </ul> </div> </div> ); }
多文件项目示例
这个示例展示了如何在 Sandpack 中使用多个文件:
import UserCard from './components/UserCard'; import './styles.css'; const users = [ { id: 1, name: '张三', role: '前端工程师', avatar: '👨💻' }, { id: 2, name: '李四', role: '后端工程师', avatar: '👩💻' }, { id: 3, name: '王五', role: 'UI设计师', avatar: '🎨' } ]; export default function App() { return ( <div className="app"> <header className="header"> <h1>🏢 团队成员</h1> <p>多文件组件示例</p> </header> <main className="user-grid"> {users.map(user => ( <UserCard key={user.id} user={user} /> ))} </main> </div> ); }
总结
Sandpack 为开发者提供了一个强大而灵活的工具,可以轻松创建交互式的代码演示。无论是写技术博客、制作教程还是分享代码片段,Sandpack 都能提供出色的用户体验。
通过简单的配置,你就可以在网页中嵌入一个功能完整的代码编辑环境,让读者能够直接体验和修改代码,这大大提升了学习和理解的效率。
自定义控制面板
下面是一个完全自定义的 Code Playground,包含了自定义的 header 控制面板,支持主题切换、布局切换、代码重置等功能:
import { useState } from 'react'; import './styles.css'; export default function App() { const [count, setCount] = useState(0); const [text, setText] = useState('Hello World!'); return ( <div className="app"> <header className="app-header"> <h1>{text}</h1> <div className="counter-section"> <p>当前计数: <span className="count">{count}</span></p> <div className="button-group"> <button className="btn btn-minus" onClick={() => setCount(count - 1)} > - </button> <button className="btn btn-plus" onClick={() => setCount(count + 1)} > + </button> <button className="btn btn-reset" onClick={() => setCount(0)} > 重置 </button> </div> </div> <div className="input-section"> <label htmlFor="text-input">修改标题:</label> <input id="text-input" type="text" value={text} onChange={(e) => setText(e.target.value)} placeholder="输入新标题..." /> </div> <div className="feature-demo"> <h3>🎨 样式演示</h3> <div className="color-boxes"> {['red', 'blue', 'green', 'purple', 'orange'].map(color => ( <div key={color} className={`color-box ${color}`} onClick={() => setText(`Hello ${color.toUpperCase()}!`)} > {color} </div> ))} </div> </div> </header> </div> ); }
🎮 控制面板功能
- 🔄 重置代码:恢复到初始代码状态
- � 切换行号:显示或隐藏代码编辑器的行号
- ✨ 格式化代码:自动格式化当前代码(开发中)
- � 在 CodeSandbox 中打开:将当前代码在 CodeSandbox 中打开
- 📁 文件浏览器:浏览和切换不同文件
- 👁️ 实时预览:代码修改后立即看到效果
这个自定义 playground 展示了 Sandpack 的强大扩展能力,你可以根据需求添加更多控制功能。