You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:06:03