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

使用jodit-react时遇Cannot read properties of undefined (reading 'document')错误求助

解决Jodit-React报错"Cannot read properties of undefined (reading 'document')"

这个错误的核心原因是Jodit编辑器依赖浏览器的document对象,若在服务端渲染(SSR)环境(如Next.js)中直接初始化组件,就会触发该错误。以下是具体解决步骤:

1. 仅在客户端环境渲染编辑器

方法一:动态导入并禁用SSR(适用于Next.js)

通过动态导入组件并关闭服务端渲染,确保编辑器只在浏览器中加载:

import dynamic from 'next/dynamic';

// 动态导入JoditEditor,禁用SSR
const JoditEditor = dynamic(() => import('jodit-react'), {
  ssr: false,
  loading: () => <p>加载编辑器中...</p>
});

方法二:条件渲染判断浏览器环境

在组件中通过typeof window !== 'undefined'判断是否处于客户端,仅满足条件时渲染编辑器:

import { useState, useRef } from 'react';
import JoditEditor from 'jodit-react';

export default function EditorComponent() {
  const [state, setState] = useState({ content: '' });
  const editor = useRef(null);

  const handleContentChange = (contentHtml) => {
    setState(prev => ({ ...prev, content: contentHtml }));
  };

  // 服务端时返回加载占位
  if (typeof window === 'undefined') {
    return <div>加载编辑器中...</div>;
  }

  return (
    <JoditEditor
      ref={editor}
      value={state.content}
      onChange={handleContentChange}
    />
  );
}

2. 修正事件处理函数的错误用法

你用useMemo包裹handleContentChange是错误的,useMemo用于缓存计算值,缓存函数应使用useCallback:

import { useCallback } from 'react';

const handleContentChange = useCallback((contentHtml) => {
  setState(prev => ({ ...prev, content: contentHtml }));
}, []);

注:这一步是代码规范修正,不是导致document错误的直接原因,但能避免不必要的函数重渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:37:39