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

React.js从Atlassian实例获取对象数据并正确渲染的问题

问题分析与解决

错误根源

初始状态下data被设为null,在异步请求invoke('getdata-creator_name')完成前,data始终是null。此时JSON.stringify(data)的结果是"null",而非你判断的"{}",这会触发非空分支的渲染逻辑,尝试访问data.creator_name时自然会抛出TypeError: d is null的错误。

修复方案

方案1:初始化空对象替代null

把useState的初始值从null改成{},这样初始时JSON.stringify(data)就是"{}",不会提前进入非空分支:

const [data, setData] = useState({});

方案2:增加null与空对象双重判断

在渲染前先判断data是否为null,再判断对象是否为空,结合可选链操作符避免报错:

// 空状态判断
{(!data || Object.keys(data).length === 0) && 'Record is empty'}

// 非空渲染逻辑
{data && Object.keys(data).length > 0 && (
  <>
    <span> Welcome {data.creator_name}</span>
    <input type='text' value={data.creator_name} />
  </>
)}

方案3:用可选链简化判断

如果不想修改初始状态,直接用可选链操作符处理null情况:

{data?.creator_name ? (
  <>
    <span> Welcome {data.creator_name}</span>
    <input type='text' value={data.creator_name} />
  </>
) : 'Record is empty'}

完整修复后的App.js示例

import React, { useEffect, useState } from "react";
// 注意:需确保已导入invoke
import { invoke } from '@forge/bridge';

function App() {
  const [data, setData] = useState({});

  useEffect(() => {
    invoke('getdata-creator_name').then(setData);
  }, []);

  return (
    <div>
      <h2> Display Records creators name</h2>
      
      {Object.keys(data).length === 0 && 'Record is empty'}
      
      {Object.keys(data).length > 0 && (
        <>
          <span> Welcome {data.creator_name}</span>
          <input type='text' value={data.creator_name} />
        </>
      )}
    </div>
  );
}

export default App;

额外提醒

  • 确认invoke函数已通过import { invoke } from '@forge/bridge';正确导入,否则请求无法发起
  • 如果storage.get('my-key')返回undefined,Resolver会自动将其转为null返回前端,仍需做好空值处理

内容的提问来源于stack exchange,提问作者Nancy Moore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:15:09