禁用 React 18 的严格模式,避免开发环境下的重复渲染和重复请求

This commit is contained in:
柳清爽
2025-05-10 14:37:53 +08:00
parent dd61736488
commit 51bbaba53a
2 changed files with 25 additions and 23 deletions

View File

@@ -1,6 +1,6 @@
"use client"
import { useState, useEffect } from "react"
import { useState, useEffect, useRef, useCallback } from "react"
import { ChevronLeft, Filter, Search, RefreshCw, ArrowRightLeft, AlertCircle, Loader2 } from "lucide-react"
import { Card } from "@/components/ui/card"
import { Button } from "@/components/ui/button"
@@ -48,9 +48,10 @@ export default function WechatAccountsPage() {
const [isLoading, setIsLoading] = useState(true)
const [isRefreshing, setIsRefreshing] = useState(false)
const accountsPerPage = 10
const mounted = useRef(false)
// 获取微信账号列表
const fetchAccounts = async (page: number = 1, keyword: string = "") => {
const fetchAccounts = useCallback(async (page: number = 1, keyword: string = "") => {
try {
setIsLoading(true);
const response = await fetchWechatAccountList({
@@ -88,7 +89,6 @@ export default function WechatAccountsPage() {
description: response?.msg || "请稍后再试",
variant: "destructive"
});
// 如果API请求失败设置空数组
setAccounts([]);
setTotalAccounts(0);
}
@@ -104,9 +104,29 @@ export default function WechatAccountsPage() {
} finally {
setIsLoading(false);
}
}, [accountsPerPage]);
// 初始化数据加载
useEffect(() => {
if (!mounted.current) {
mounted.current = true;
fetchAccounts(currentPage, searchQuery);
}
}, []);
// 处理页码和搜索变化
useEffect(() => {
if (mounted.current) {
fetchAccounts(currentPage, searchQuery);
}
}, [currentPage, searchQuery, fetchAccounts]);
// 搜索处理
const handleSearch = () => {
setCurrentPage(1);
};
// 刷新微信账号状态
// 刷新处理
const handleRefresh = async () => {
try {
setIsRefreshing(true);
@@ -138,24 +158,6 @@ export default function WechatAccountsPage() {
}
};
// 初始加载和页码变化时获取数据
useEffect(() => {
fetchAccounts(currentPage, searchQuery);
}, [currentPage]);
// 搜索时重置页码并获取数据
const handleSearch = () => {
setCurrentPage(1);
fetchAccounts(1, searchQuery);
};
// 处理搜索框回车事件
const handleSearchKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
if (e.key === 'Enter') {
handleSearch();
}
};
const filteredAccounts = accounts;
const totalPages = Math.ceil(totalAccounts / accountsPerPage);
@@ -207,7 +209,6 @@ export default function WechatAccountsPage() {
placeholder="搜索微信号/昵称"
value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
onKeyDown={handleSearchKeyDown}
/>
</div>
<Button variant="outline" size="icon">

View File

@@ -21,6 +21,7 @@ const nextConfig = {
parallelServerBuildTraces: true,
parallelServerCompiles: true,
},
reactStrictMode: false,
}
mergeConfig(nextConfig, userConfig)