blob: 503ca6b5ea419c7f61dc994131829f1a4e44aba2 [file] [log] [blame]
import React, { useState } from 'react';
import { Heart, MessageCircle, Share2, Bookmark, Search, User, Home, Compass, Plus, Bell } from 'lucide-react';
import './App.css';
function App() {
const [posts, setPosts] = useState([
{
id: 1,
username: "创作者小红",
avatar: "/api/placeholder/40/40",
image: "/api/placeholder/300/400",
title: "今日OOTD分享 🌸",
content: "春日温柔穿搭,粉色系永远不会出错!",
likes: 1234,
comments: 89,
isLiked: false,
isSaved: false
},
{
id: 2,
username: "美食达人",
avatar: "/api/placeholder/40/40",
image: "/api/placeholder/300/400",
title: "超简单的蛋糕制作 🍰",
content: "零失败率的草莓蛋糕,新手也能做出完美作品!",
likes: 2567,
comments: 156,
isLiked: false,
isSaved: false
},
{
id: 3,
username: "旅行摄影师",
avatar: "/api/placeholder/40/40",
image: "/api/placeholder/300/400",
title: "云南大理古城 📸",
content: "漫步在石板路上,感受千年古城的魅力",
likes: 3421,
comments: 234,
isLiked: true,
isSaved: false
}
]);
const [activeTab, setActiveTab] = useState('home');
const handleLike = (postId) => {
setPosts(posts.map(post =>
post.id === postId
? { ...post, isLiked: !post.isLiked, likes: post.isLiked ? post.likes - 1 : post.likes + 1 }
: post
));
};
const handleSave = (postId) => {
setPosts(posts.map(post =>
post.id === postId
? { ...post, isSaved: !post.isSaved }
: post
));
};
return (
<div className="app">
{/* Header */}
<header className="header">
<div className="header-content">
<h1 className="logo">小红书</h1>
<div className="search-bar">
<Search size={20} />
<input type="text" placeholder="搜索你感兴趣的内容" />
</div>
<div className="header-actions">
<Bell size={24} />
<User size={24} />
</div>
</div>
</header>
{/* Main Content */}
<main className="main-content">
<div className="posts-container">
{posts.map(post => (
<div key={post.id} className="post-card">
<div className="post-image">
<img src={post.image} alt={post.title} />
</div>
<div className="post-content">
<h3 className="post-title">{post.title}</h3>
<p className="post-description">{post.content}</p>
<div className="post-author">
<img src={post.avatar} alt={post.username} className="author-avatar" />
<span className="author-name">{post.username}</span>
</div>
<div className="post-actions">
<button
className={`action-btn ${post.isLiked ? 'liked' : ''}`}
onClick={() => handleLike(post.id)}
>
<Heart size={16} fill={post.isLiked ? '#ff4757' : 'none'} />
<span>{post.likes}</span>
</button>
<button className="action-btn">
<MessageCircle size={16} />
<span>{post.comments}</span>
</button>
<button className="action-btn">
<Share2 size={16} />
</button>
<button
className={`action-btn ${post.isSaved ? 'saved' : ''}`}
onClick={() => handleSave(post.id)}
>
<Bookmark size={16} fill={post.isSaved ? '#ffa502' : 'none'} />
</button>
</div>
</div>
</div>
))}
</div>
</main>
{/* Bottom Navigation */}
<nav className="bottom-nav">
<button
className={`nav-btn ${activeTab === 'home' ? 'active' : ''}`}
onClick={() => setActiveTab('home')}
>
<Home size={24} />
<span>首页</span>
</button>
<button
className={`nav-btn ${activeTab === 'discover' ? 'active' : ''}`}
onClick={() => setActiveTab('discover')}
>
<Compass size={24} />
<span>发现</span>
</button>
<button
className={`nav-btn ${activeTab === 'create' ? 'active' : ''}`}
onClick={() => setActiveTab('create')}
>
<Plus size={24} />
<span>创作</span>
</button>
<button
className={`nav-btn ${activeTab === 'profile' ? 'active' : ''}`}
onClick={() => setActiveTab('profile')}
>
<User size={24} />
<span>我</span>
</button>
</nav>
</div>
);
}
export default App;