gpt4 book ai didi

reactjs - `forwardRef` 在 Next.js 中动态导入模块时出错

转载 作者:行者123 更新时间:2023-12-04 11:54:12 51 4
gpt4 key购买 nike

我正在尝试在外部组件上使用 forwardRef,但 ref.current不是实际的 ref .不确定我是否遗漏了什么。
我正在做:

const Editor = dynamic(() => import("react-markdown-editor-lite"), {
ssr: false
});

const ForwardedRefEditor = forwardRef((props, ref) => (
<Editor {...props} ref={ref} />
));

-----

const editorRef = useRef(null);
<ForwardedRefEditor
ref={editorRef}
value={content}
onChange={({ text }) => setContent(text)}
/>
全码: https://codesandbox.io/s/objective-benz-qh4ec?file=/pages/index.js:63-73
更多信息: https://github.com/vercel/next.js/issues/4957

最佳答案

您需要将组件包装在自定义组件中。
使用 forwardRef:
包裹您的 Editor成分:

import React from "react";
import Editor from "react-markdown-editor-lite";

export default function WrappedEditor({ editorRef, ...props }) {
return <Editor {...props} ref={editorRef} />;
}
然后动态导入:
import dynamic from "next/dynamic";
import { useRef, useState, forwardRef } from "react";

const Editor = dynamic(() => import("../WrappedEditor"), {
ssr: false
});

const ForwardRefEditor = forwardRef((props, ref) =>
<Editor {...props} editorRef={ref}/>
)

export default function IndexPage() {
const editorRef = useRef(null);
const [content, setContent] = useState("");

console.log("editorRef", editorRef.current);

return (
<ForwardRefEditor
ref={editorRef}
value={content}
onChange={({ text }) => setContent(text)}
/>
);
}
CodeSandbox
您也可以使用 custom prop approach不使用 forwardRef .
自定义 Prop
包裹您的 Editor组件与前面的示例完全相同:
import React from "react";
import Editor from "react-markdown-editor-lite";

export default function WrappedEditor({ editorRef, ...props }) {
return <Editor {...props} ref={editorRef} />;
}
将自定义 ref 属性传递给 Editor成分:
import dynamic from "next/dynamic";
import { useRef, useState } from "react";

const Editor = dynamic(() => import("../WrappedEditor"), {
ssr: false
});

export default function IndexPage() {
const editorRef = useRef(null);
const [content, setContent] = useState("");

console.log("editorRef", editorRef.current);

return (
<Editor
editorRef={editorRef}
value={content}
onChange={({ text }) => setContent(text)}
/>
);
}
CodeSandbox

关于reactjs - `forwardRef` 在 Next.js 中动态导入模块时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63469232/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com