未定义窗口 - react-draft-wysiwyg 与下一个 js (s-s-r) 一起使用
Posted
技术标签:
【中文标题】未定义窗口 - react-draft-wysiwyg 与下一个 js (s-s-r) 一起使用【英文标题】:window is not defined - react-draft-wysiwyg used with next js (s-s-r) 【发布时间】:2020-12-06 14:27:35 【问题描述】:我正在开发一个富文本编辑器,用于将纯 html 转换为带有下一个 js 用于 s-s-r 的编辑器内容。我得到了这个错误窗口没有定义所以我搜索这个github的解决方案link
它使用了next js的动态导入功能。
而不是直接导入编辑器import Editor from "react-draft-wysiwyg";
它使用这段代码来动态导入编辑器
const Editor = dynamic(
() =>
return import("react-draft-wysiwyg").then(mod => mod.Editor);
,
s-s-r: false
);
尽管我已经安装了这个 react-draft-wysiwyg 模块,但我仍然收到此错误
ModuleParseError: Module parse failed: Unexpected token (19:9)
You may need an appropriate loader to handle this file type.
| import dynamic from "next/dynamic";
| var Editor = dynamic(function ()
> return import("react-draft-wysiwyg").then(function (mod)
| return mod.Editor;
| );
这是我的全部代码
import React, Component from "react";
import EditorState from "draft-js";
// import Editor from "react-draft-wysiwyg";
import dynamic from "next/dynamic";
const Editor = dynamic(
() =>
return import("react-draft-wysiwyg").then(mod => mod.Editor);
,
s-s-r: false
);
class MyEditor extends Component
constructor(props)
super(props);
this.state = editorState: EditorState.createEmpty() ;
onEditorStateChange = editorState =>
this.setState( editorState );
;
render()
const editorState = this.state;
return (
<div>
<Editor
editorState=editorState
wrapperClassName="rich-editor demo-wrapper"
editorClassName="demo-editor"
onEditorStateChange=this.onEditorStateChange
placeholder="The message goes here..."
/>
</div>
);
export default MyEditor;
请帮帮我。谢谢。
【问题讨论】:
我的日志有 samo 错误:\react-draft-wysiwyg.js:1:393)
undefined window ... 是同一个错误点吗?
错误信息是什么?它认为是因为在未定义窗口的服务器端渲染组件
其实我的代码和你的一样,在我的项目中运行良好
【参考方案1】:
这里有一个解决方法
import dynamic from 'next/dynamic'
import EditorProps from 'react-draft-wysiwyg'
// install @types/draft-js @types/react-draft-wysiwyg and @types/draft-js @types/react-draft-wysiwyg for types
const Editor = dynamic<EditorProps>(
() => import('react-draft-wysiwyg').then((mod) => mod.Editor),
s-s-r: false
)
【讨论】:
动态导入修复了安装类型时没有定义窗口的错误,使用EditorProps修复了Typescript中的类型错误【参考方案2】:在 React 使用 useEffect
钩子更新 DOM 后,尝试返回 Editor
。例如:
const [editor, setEditor] = useState<boolean>(false)
useEffect(() =>
setEditor(true)
)
return (
<>
editor ? (
<Editor
editorState=editorState
wrapperClassName="rich-editor demo-wrapper"
editorClassName="demo-editor"
onEditorStateChange=this.onEditorStateChange
placeholder="The message goes here..."
/>
) : null
</>
)
【讨论】:
这个问题不是在加载组件时出现,而是在导入组件时出现。以上是关于未定义窗口 - react-draft-wysiwyg 与下一个 js (s-s-r) 一起使用的主要内容,如果未能解决你的问题,请参考以下文章