refactor(EmojiPicker): 优化表情选择器样式并移除未使用的代码

- 将默认触发器从 button 改为 span 以简化结构
- 调整触发器样式使其更紧凑
- 移除未使用的 getAllEmojis 导入
- 删除不再使用的 EmojiPickerDemo 组件
This commit is contained in:
超级老白兔
2025-09-09 15:07:23 +08:00
parent e76e5629bd
commit c9f9530d09
3 changed files with 13 additions and 146 deletions

View File

@@ -7,16 +7,15 @@
/* 默认触发器按钮 */
.emoji-picker-trigger {
background: none;
border: 1px solid #e0e0e0;
border-radius: 6px;
padding: 8px 12px;
font-size: 18px;
font-size: 16px;
padding: 5px;
cursor: pointer;
transition: all 0.2s ease;
border-radius: 5px;
}
.emoji-picker-trigger:hover {
background-color: #f5f5f5;
background-color: #e9e9e9;
border-color: #d0d0d0;
}
@@ -130,7 +129,7 @@
.emoji-picker-panel {
width: 280px;
}
.emoji-grid {
grid-template-columns: repeat(7, 1fr);
}
@@ -143,26 +142,26 @@
border-color: #4a5568;
color: white;
}
.emoji-categories {
background-color: #1a202c;
border-bottom-color: #4a5568;
}
.category-btn:hover {
background-color: #4a5568;
}
.emoji-item:hover {
background-color: #4a5568;
}
.emoji-picker-trigger {
border-color: #4a5568;
color: white;
}
.emoji-picker-trigger:hover {
background-color: #4a5568;
}
}
}

View File

@@ -1,10 +1,5 @@
import React, { useState, useRef, useEffect } from "react";
import {
EmojiCategory,
EmojiInfo,
getAllEmojis,
getEmojisByCategory,
} from "./wechatEmoji";
import { EmojiCategory, EmojiInfo, getEmojisByCategory } from "./wechatEmoji";
import "./EmojiPicker.css";
interface EmojiPickerProps {
@@ -63,7 +58,7 @@ const EmojiPicker: React.FC<EmojiPickerProps> = ({
};
// 默认触发器
const defaultTrigger = <button className="emoji-picker-trigger">😊</button>;
const defaultTrigger = <span className="emoji-picker-trigger">😊</span>;
return (
<div className={`emoji-picker-container ${className}`} ref={pickerRef}>

View File

@@ -1,127 +0,0 @@
import React, { useState } from "react";
import EmojiPicker from "./EmojiPicker";
import { EmojiInfo } from "./wechatEmoji";
const EmojiPickerDemo: React.FC = () => {
const [selectedEmojis, setSelectedEmojis] = useState<EmojiInfo[]>([]);
const [message, setMessage] = useState("");
// 处理表情选择
const handleEmojiSelect = (emoji: EmojiInfo) => {
setSelectedEmojis(prev => [...prev, emoji]);
// 模拟发送表情
console.log("发送表情:", emoji.name);
alert(`发送了表情: ${emoji.name}`);
};
// 清空选择的表情
const clearEmojis = () => {
setSelectedEmojis([]);
};
return (
<div style={{ padding: "20px", maxWidth: "600px", margin: "0 auto" }}>
<h2></h2>
{/* 输入区域 */}
<div style={{ marginBottom: "20px" }}>
<textarea
value={message}
onChange={e => setMessage(e.target.value)}
placeholder="输入消息..."
style={{
width: "100%",
height: "100px",
padding: "10px",
border: "1px solid #ddd",
borderRadius: "4px",
resize: "vertical",
}}
/>
</div>
{/* 表情选择器 */}
<div style={{ marginBottom: "20px" }}>
<label
style={{ display: "block", marginBottom: "8px", fontWeight: "bold" }}
>
:
</label>
<EmojiPicker onEmojiSelect={handleEmojiSelect} />
</div>
{/* 已选择的表情 */}
{selectedEmojis.length > 0 && (
<div style={{ marginBottom: "20px" }}>
<h3>:</h3>
<div
style={{
display: "flex",
flexWrap: "wrap",
gap: "8px",
padding: "10px",
backgroundColor: "#f5f5f5",
borderRadius: "4px",
}}
>
{selectedEmojis.map((emoji, index) => (
<div
key={index}
style={{
display: "flex",
alignItems: "center",
gap: "4px",
padding: "4px 8px",
backgroundColor: "white",
borderRadius: "4px",
fontSize: "12px",
}}
>
<img
src={emoji.path}
alt={emoji.name}
style={{ width: "20px", height: "20px" }}
/>
<span>{emoji.name}</span>
</div>
))}
</div>
<button
onClick={clearEmojis}
style={{
marginTop: "10px",
padding: "6px 12px",
backgroundColor: "#dc3545",
color: "white",
border: "none",
borderRadius: "4px",
cursor: "pointer",
}}
>
</button>
</div>
)}
{/* 使用说明 */}
<div
style={{
backgroundColor: "#e7f3ff",
padding: "15px",
borderRadius: "4px",
fontSize: "14px",
}}
>
<h4>使:</h4>
<ul>
<li></li>
<li></li>
<li>&ldquo;&rdquo;</li>
<li></li>
</ul>
</div>
</div>
);
};
export default EmojiPickerDemo;