React文件状态组件三元运算未校验条件始终返回public问题排查
问题解答
问题原因
- 首先明确:该问题和你定义的
const status无关,核心是td内的三元判断逻辑完全不符合需求:你当前的逻辑是仅当「是userA且isShared为true」时显示props传入的status,其余所有场景都强制返回public,这就是无论isShared取什么值都显示public的直接原因。 - 缺失状态替换逻辑:你要求满足条件时状态要变更为
shared,但你当前满足判断条件时返回的是props传入的默认值private,没有做替换。 - 附带代码笔误:
FileResultType接口中定义的字段是result,你解构props时写的是results,会导致字段取值异常。
修复方案
首先调整渲染逻辑,符合你的业务要求:默认显示private,仅当操作用户是userA且isShared为true时显示shared。
修复后的完整代码如下:
import React from "react"; import { useSelector } from "react-redux"; import { getLocalStorageStore } from "@/store/localStorage/utils"; // 修正接口字段名,和实际使用对齐 export interface FileResultType { result: string filename: string status?: string // 加可选标记,匹配默认值逻辑 } const FileResults: React.FC<FileResultType> = props => { // 修正解构字段名result,不是results const { result, filename, status = "private" } = props; const { email = "", isShared = false } = useSelector(getLocalStorageStore); const isUserA = email.toLowerCase().includes("usera"); // 提前计算展示的状态,逻辑更清晰 const showStatus = isUserA && isShared ? "shared" : status; // 如果需要同步更新到数据库,可在状态变更时加以下逻辑(根据你的业务触发时机调整) // useEffect(() => { // if (isUserA && isShared && status !== 'shared') { // // 调用你的更新状态接口,把shared存到数据库 // } // }, [isUserA, isShared, status]) return ( <tr className="file-result"> <td>{result || "--"}</td> <td>{filename || "--"}</td> <td>{showStatus}</td> </tr> ); }; export default FileResults;
另外你提供的Go结构体API定义也有笔误,status的json标签少了引号,修正后为:
type FileresultData struct { result string `json: "id"` filename string `json: "filename"` status string `json: "status"` // 补全引号 }
内容的提问来源于stack exchange,提问作者Didi
相关产品推荐
相关产品推荐

