reactjs - 如何在 Next.js 中使用门户获取直接父容器之外的子元素?
问题描述
当前实施
容器
export const FormContainer = () => {
return (<Form/>);
}
零件
export const Form = () => {
return ReactDOM.createPortal(
<aside>
<div>{"I am a component"}<div/>
</aside>,
document.body
);
}
错误
ReferenceError:文档未定义
期待
我希望表单脱离 FormContainer DOM 层次结构。
解决方案
ReferenceError:文档未定义
ReactDOM.createPortal
更像是一个“仅浏览器端”组件,因为它需要document
并且在服务器端渲染中,它是未定义的。
我希望表单脱离 FormContainer DOM 层次结构。
最简单的解决方案:设置一个条件来检查createPortal
组件的 BrowserOnly 渲染:
根据saimeunt的回答,类似
export const FormContainer = () => {
return (
{process.browser?
<Form/>:null
}
);
}
会成功的。
另一种方法是使用 nextJs动态导入并在模块上禁用 SSR
import dynamic from "next/dynamic";
const Form = dynamic(() => import("path/to/FormModule"), { ssr: false });
export const FormContainer = () => {
return (<Form/>);
}
推荐阅读
- java - Java:动态类型约束
- c# - 带有自定义 .nuspec 元数据的 nuget pack .csproj
- java - QueryDsl 避免多个 if 块
- mysql - 获取与供应商的外键值相同的最后插入(最新添加)的合同 ID
- heroku - Specified query type "Query" not found in document when deploying to heroku
- python - Function python for odoo 10
- javascript - 制作适用于多种分辨率的 2 列布局的最佳方法是什么?
- c# - WinAPI 中的 SafeHandle 与 IntPtr 和 C# 中的 CloseHandle
- c# - 如何在一个平台上更改布局而不影响另一个平台
- javascript - 从嵌套结构中删除项目