diff --git a/Merge/front/src/components/HomeFeed.jsx b/Merge/front/src/components/HomeFeed.jsx
index 0f3c0fe..e30eb73 100644
--- a/Merge/front/src/components/HomeFeed.jsx
+++ b/Merge/front/src/components/HomeFeed.jsx
@@ -11,11 +11,6 @@
 import MediaPreview from './MediaPreview'
 import '../style/HomeFeed.css'
 
-const categories = [
-  '推荐','穿搭','美食','彩妆','影视',
-  '职场','情感','家居','游戏','旅行','健身'
-]
-
 const recommendModes = [
   { label: '标签推荐', value: 'tag' },
   { label: '协同过滤推荐', value: 'cf' },
@@ -31,9 +26,8 @@
   // 获取当前用户ID，如果未登录则使用默认值
   const getCurrentUserId = () => {
     const userInfo = getUserInfo()
-    return userInfo?.id ? String(userInfo.id) : DEFAULT_USER_ID
-  }
-  const [activeCat, setActiveCat] = useState('推荐')
+    return userInfo?.id ? String(userInfo.id) : DEFAULT_USER_ID  }
+  
   const [items, setItems]         = useState([])
   const [loading, setLoading]     = useState(true)
   const [error, setError]         = useState(null)
@@ -43,13 +37,12 @@
   const [recCFNum, setRecCFNum] = useState(20)
   const [useSearchRecommend, setUseSearchRecommend] = useState(false) // 是否使用搜索推荐模式  // JWLLL 搜索推荐功能函数
   const [userMap, setUserMap] = useState({}) // user_id: {username, nickname}
-  
-  // JWLLL搜索推荐内容
+    // JWLLL搜索推荐内容
   const fetchSearchContent = useCallback(async (keyword = '') => {
     setLoading(true)
     setError(null)
     try {
-      const data = await searchAPI.search(keyword || activeCat, activeCat === '推荐' ? undefined : activeCat)
+      const data = await searchAPI.search(keyword, undefined)
       // 新增：拉取详情，保证和推荐一致
       const detailed = await Promise.all(
         (data.results || []).map(async item => {
@@ -86,7 +79,7 @@
       setItems([])
     }
     setLoading(false)
-  }, [activeCat])
+  }, [])
   // 标签推荐
   const fetchTagRecommend = useCallback(async (tags) => {
     setLoading(true)
@@ -255,7 +248,6 @@
     }))
     setUserMap(map)
   }
-
   useEffect(() => {
     // 原始数据加载函数
     const loadPosts = async () => {
@@ -289,15 +281,14 @@
     }
 
     // 根据模式选择加载方式
-    if (activeCat === '推荐' && useSearchRecommend) {
+    if (useSearchRecommend) {
       fetchUserTagsAndRecommend()
     } else {
       loadPosts()
     }
-  }, [activeCat, useSearchRecommend, fetchUserTagsAndRecommend])
-  // 切换推荐模式时的额外处理
+  }, [useSearchRecommend, fetchUserTagsAndRecommend])  // 切换推荐模式时的额外处理
   useEffect(() => {
-    if (activeCat === '推荐' && useSearchRecommend) {
+    if (useSearchRecommend) {
       fetchUserTagsAndRecommend()
     }
     // eslint-disable-next-line
@@ -325,10 +316,9 @@
       {/* 数据源切换 */}
       <div style={{marginBottom:12, display:'flex', alignItems:'center', gap:16}}>
         <span>数据源：</span>
-        <div style={{display:'flex', gap:8}}>
-          <button
+        <div style={{display:'flex', gap:8}}>          <button
             className={!useSearchRecommend ? 'rec-btn styled active' : 'rec-btn styled'}
-            onClick={() => {setUseSearchRecommend(false); setActiveCat('推荐')}}
+            onClick={() => setUseSearchRecommend(false)}
             type="button"
             style={{
               borderRadius: 20,
@@ -341,10 +331,9 @@
               transition: 'all 0.2s',
               outline: 'none',
             }}
-          >原始数据</button>
-          <button
+          >原始数据</button>          <button
             className={useSearchRecommend ? 'rec-btn styled active' : 'rec-btn styled'}
-            onClick={() => {setUseSearchRecommend(true); setActiveCat('推荐')}}
+            onClick={() => setUseSearchRecommend(true)}
             type="button"
             style={{
               borderRadius: 20,
@@ -359,10 +348,8 @@
             }}
           >智能推荐</button>
         </div>
-      </div>
-
-      {/* 推荐模式切换，仅在推荐页显示且使用搜索推荐时 */}
-      {activeCat === '推荐' && useSearchRecommend && (
+      </div>      {/* 推荐模式切换，仅在使用智能推荐时显示 */}
+      {useSearchRecommend && (
         <div style={{marginBottom:12, display:'flex', alignItems:'center', gap:16}}>
           <span style={{marginRight:8}}>推荐模式：</span>
           <div style={{display:'flex', gap:8}}>
@@ -408,30 +395,7 @@
           onChange={e => setSearch(e.target.value)}
         />
         <button type="submit" className="search-btn">搜索</button>
-      </form>
-
-      {/* 顶部分类 */}
-      <nav className="feed-tabs">
-        {categories.map(cat => (
-          <button
-            key={cat}
-            className={cat === activeCat ? 'tab active' : 'tab'}
-            onClick={() => { 
-              setActiveCat(cat); 
-              setSearch('');
-              if (useSearchRecommend) {
-                if (cat === '推荐') {
-                  fetchUserTagsAndRecommend()
-                } else {
-                  fetchSearchContent()
-                }
-              }
-            }}
-          >
-            {cat}
-          </button>
-        ))}
-      </nav>      {/* 状态提示 */}
+      </form>      {/* 状态提示 */}
       {loading ? (
         <div className="loading">加载中…</div>
       ) : error ? (
