Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@
"@types/react": "~18.0.5",
"@types/react-dom": "~18.0.1",
"@types/react-test-renderer": "~18.0.0",
"@uiw/react-github-corners": "~1.5.14",
"@uiw/react-markdown-preview": "~4.0.6",
"@uiw/react-github-corners": "~1.5.3",
"@uiw/react-markdown-preview": "~3.5.1",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@SunLxy"@uiw/react-markdown-preview": "~4.0.6" 报错?

"@uiw/reset.css": "~1.0.6",
"@wcj/dark-mode": "^1.0.14",
"compile-less-cli": "~1.8.11",
Expand Down Expand Up @@ -102,4 +102,4 @@
"last 1 safari version"
]
}
}
}
2 changes: 1 addition & 1 deletion src/index.less
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
border-radius: 3px;
margin-bottom: 16px;
background-color: var(--color-code-preview-bg) !important;
color: transparent !important;
Comment thread
jaywcjlove marked this conversation as resolved.
// color: transparent !important;
max-height: 420px;
min-height: 12px;
z-index: 10;
Expand Down
23 changes: 18 additions & 5 deletions src/useCodePreview.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
import React, { useEffect, useRef } from 'react';
// @ts-ignore
import ReactDOMClient from 'react-dom/client';
import ReactDOM from 'react-dom';
import { useState } from 'react';
import { babelTransform } from './transform';
import { CodePreviewProps } from './';
import ReactDOM from 'react-dom';

export const getReactDOMClient = () => {
let _ReactDOM;
try {
// 使用 require 解决 react v17 ts 报错问题
_ReactDOM = require('react-dom/client');
} catch (err) {
// console.warn(`如果使用的是react-dom小于v18的版本,可以忽略此警告:${err}`)
}
return _ReactDOM;
};

export function useCodePreview(props: CodePreviewProps) {
const [demoDom, setDemoDom] = useState<HTMLDivElement>();
Expand All @@ -16,6 +25,10 @@ export function useCodePreview(props: CodePreviewProps) {
const [copied, setCopied] = useState(false);
const [code, setCode] = useState(props.code || '');

const ReactDOMClient = React.useMemo(() => {
return getReactDOMClient();
}, []);

/** 通过缓存的方式 解决 react v18 中 的报错 ***/
// @ts-ignore
const cachesRef = React.useRef(new Map<string, ReactDOMClient.Root>([]));
Expand Down Expand Up @@ -51,9 +64,9 @@ export function useCodePreview(props: CodePreviewProps) {
ReactDOMClient: _ReactDOMClient,
...otherDeps
} = props.dependencies || {};
const V18ReactDOM = _ReactDOMClient || ReactDOMClient || _ReactDOM || ReactDOM;
let V18ReactDOM = _ReactDOMClient || ReactDOMClient || _ReactDOM || ReactDOM;
// 判断是否是 react v18版本
const isV18 = Reflect.has(V18ReactDOM || {}, 'createRoot');
const isV18 = Reflect.has(V18ReactDOM, 'createRoot');
const NewReactDOM = isV18 ? ReactDOMRender(V18ReactDOM) : V18ReactDOM;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@SunLxy 处理方法仍然有问题,我们的代码放到 codepen 和 codesandbox 中是可以预览的

image


try {
Expand Down