-
Notifications
You must be signed in to change notification settings - Fork 70
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC] Rax App 自定义 HTML #713
Comments
这个点是 Document 引入的吧。 html-webpack-plugin 相比 Document 最核心的区别感觉在条件渲染这块,html 如果要做到 Document 那种能力需要借助模版语言开发体验和维护性都比较差。 |
是的,核心还是目前 Rax App 需要兼容构建 Document,再引入这个就会存在三种模式 |
https://rax.js.org/docs/guide/safe-area 安全区域适配需要自定义html才能加入meta 吗? |
这个 meta 默认已经加了 |
Rax App 自定义 HTML
概述
面向未来,Rax App 推荐开发者尽量少的自定义 HTML,但是依然存在一些特殊的场景业务需要自定义 HTML 内容。
现有的方案中,Rax App 提供了
src/document/index.jsx
,用以下方式在构建时执行renderToString
获取 HTML 文档:但随着业务发展,该方案渐渐无法满足诉求,基于此我们希望可以通过更强大的方式来构建 HTML 文档。
背景
现有的
src/document/index.jsx
方案优势是:Document.getInitialProps
统一获取页面数据(这个实用性后续再讨论)劣势是:
src/document/index.jsx
rax-document
无法很好的对产出的 HTML 结构进行修改src/document/index.jsx
里做,但实际上有很多业务场景 TDK 是和页面逻辑关联的id="root"
path
作为唯一值为什么不用 html-webpack-plugin
核心最大的问题还是无法解决 SSR 场景下条件渲染的问题,参考现有 icejs 的相关实现,如果业务需要在服务端渲染的时候做条件渲染,只能在服务端调用
render(ctx, { htmlTemplate })
。这种形式引入了两个问题:public/index.html
一份,htmlTemplate
一份该方案依然让自定义挂载节点变得更加复杂,例如目前 icejs 只能用
id="root"
作为挂载节点从 Rax App 框架本身渐进式演进来看,需要引入额外一套构建方式,会增加维护成本
解法
我们新的方案即使无法解决所有的问题,但是依然会着重考虑以下几个点:
基于以上所有的分析,新方案大方向上沿用
src/document/index.jsx
,将rax-document
的能力内置到rax-app
,并由rax-app
对外提供 HTML 核心组件,同时面向三方的 build scripts 插件提供操作 HTML 结构的能力。基础示例
Document
TDK
Rax App 提供的 HTML 组件
基于以上能力,95% 以上的业务都不再需要 document。
如何引导开发者使用
The text was updated successfully, but these errors were encountered: