@@ -74,6 +74,7 @@ const on_edit = () => {
// 用户信息卡片组件
// 用户信息卡片组件
const UserInfoCardComponent : React.FC < UserInfoCardProps > = ( {
const UserInfoCardComponent : React.FC < UserInfoCardProps > = ( {
editable = true ,
editable = true ,
user_info : user_info_prop ,
is_current_user ,
is_current_user ,
is_following = false ,
is_following = false ,
collapseProfile ,
collapseProfile ,
@@ -84,8 +85,9 @@ const UserInfoCardComponent: React.FC<UserInfoCardProps> = ({
set_user_info ,
set_user_info ,
onTab ,
onTab ,
} ) = > {
} ) = > {
const global_user_info = useUserInfo ( ) ;
const user_info = useUserInfo ( ) ;
// 查看别人页面时用传入的 user_info, 个人页用全局 store
const user_info = is_current_user ? global_user_info : ( user_info_prop ? ? global_user_info ) ;
const nickname_change_status = useNicknameChangeStatus ( ) ;
const nickname_change_status = useNicknameChangeStatus ( ) ;
const { setShowGuideBar } = useGlobalState ( ) ;
const { setShowGuideBar } = useGlobalState ( ) ;
const { updateUserInfo , updateNickname , fetchLastTestResult } =
const { updateUserInfo , updateNickname , fetchLastTestResult } =
@@ -98,18 +100,16 @@ const UserInfoCardComponent: React.FC<UserInfoCardProps> = ({
const prevUserInfoRef = useRef < Partial < UserInfoType > > ( ) ;
const prevUserInfoRef = useRef < Partial < UserInfoType > > ( ) ;
useEffect ( ( ) = > {
useEffect ( ( ) = > {
// 只在 user_info 真正变化时打印(通过 JSON 序列化比较)
const prevStr = JSON . stringify ( prevUserInfoRef . current ) ;
const prevStr = JSON . stringify ( prevUserInfoRef . current ) ;
const currentStr = JSON . stringify ( user_info ) ;
const currentStr = JSON . stringify ( user_info ) ;
if ( prevStr !== currentStr ) {
if ( prevStr !== currentStr ) {
console . log ( "UserInfoCard 用户信息变化:" , user_info ) ;
prevUserInfoRef . current = user_info ;
prevUserInfoRef . current = user_info ;
}
}
// 如果全局状态中没有测试结果,则调用接口(使用请求锁,多个组件同时调用时只会请求一次)
// 仅当前用户才拉取 NTRP 测试结果
if ( ! lastTestResult && user_info ? . id ) {
if ( is_current_user && ! lastTestResult && user_info ? . id ) {
fetchLastTestResult ( ) ;
fetchLastTestResult ( ) ;
}
}
} , [ user_info ? . id , lastTestResult , fetchLastTestResult ] ) ;
} , [ user_info ? . id , lastTestResult , fetchLastTestResult , is_current_user ]) ;
// 从全局状态中获取测试状态
// 从全局状态中获取测试状态
const ntrpTested = lastTestResult ? . has_test_in_last_month || false ;
const ntrpTested = lastTestResult ? . has_test_in_last_month || false ;