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

在Next.js中使用await时monaco-editor持续加载的问题

解决Next.js客户端组件中monaco-editor异步加载数据显示Loading的问题

问题原因

  1. 标注了"use client"的组件直接写成async函数,会让组件处于Suspense状态,和@monaco-editor/react的渲染逻辑冲突
  2. defaultValue仅在编辑器首次渲染时生效,异步获取的数据返回后不会触发编辑器内容更新

解决方案

改用useState管理代码状态,通过useEffect异步获取数据,并用value属性绑定状态,确保数据更新时编辑器同步刷新:

"use client"

import { useState, useEffect } from 'react';
import { getCode } from '@/lib/getTasks';
import Editor from '@monaco-editor/react';

const AppDetails = ({ params }) => {
  const [code, setCode] = useState("");

  useEffect(() => {
    const fetchCode = async () => {
      const fetchedCode = await getCode(params.taskid);
      console.log(fetchedCode);
      setCode(fetchedCode);
    };

    fetchCode();
  }, [params.taskid]);

  return (
    <div>
      <Editor height="90vh" defaultLanguage="python" value={code} />
    </div>
  )
}

export default AppDetails

补充:自定义加载状态

如果需要在代码加载完成前显示自定义提示,可以添加条件渲染:

return (
  <div>
    {code ? (
      <Editor height="90vh" defaultLanguage="python" value={code} />
    ) : (
      <div>加载代码中...</div>
    )}
  </div>
)

内容的提问来源于stack exchange,提问作者Nazmus Sakib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:37:45