[RFC] optimize live demo feature in 2.3 alpha version #1991
PeachScript
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
计划对 #1905 实现的 live demo 能力做调整,出发点如下:
调整计划:
demo-scopes
和disabled
,demo 的依赖作用域直接跟着 demo 元数据走,因为 demo component 执行本身也需要依赖,所以不会增加额外的尺寸@/constants
之类的,下方生成 context 时会用到evalCode
、LiveProvider
、useDemoScopes
及相关的 slots 合并梳理成useLiveDemo
API 和SourceCodeEditor
Slot 两部分useLiveDemo
id
,返回node
、error
和setSources
参数,内部会带上 context 执行 sources 后返回新的 demo 组件,包含原evalCode
的逻辑,但执行方式为传入虚拟的require
、module
和exports
,这样不用对源代码做特殊处理ErrorBoundary
SourceCodeEditor
,是SourceCode
slot 的可编辑版本,为了覆盖已经自定义SourceCode
的场景,所以要建个新的 slot 来实现,如何工作:onTranspile
的 prop,在源码被转换的时候触发,用 sucrase transpire 源码,以便为自定义留出空间(比如 sucrase 不支持 Vue,通过替换该 slot 可自定义编译 Vue)SourceCode
上面垫一个透明的 textarea,这样可以省去 editor 的尺寸,同时要考虑SourceCode
自定义后行高、字体发生改变的情况onTranspile
传递 error 供外部展示PreviewerActions
:SourceCode
的渲染根据 demo 的 context 标记差异化渲染为SourceCodeEditor
,存在 context 才支持编辑,兼容没实现该能力的技术栈onSourcesChange
的 prop,聚合内部SourceCodeEditor
的onChange
结果返回出来Tab 栏上展示已编辑状态,比如* index.tsx
Previewer
:PreviewerActions
的onSourcesChange
与useLiveDemo
的setSources
绑定useLiveDemo
获取实时编译的组件,存在liveDemoNode
时替代props.children
渲染postMessage
传递给 iframe 内的DemoRenderPage
去做实时编译渲染DemoRenderPage
:postMessage
数据与useLiveDemo
的setSources
绑定useLiveDemo
获取实时编译的组件,存在liveDemoNode
时替代demo.component
渲染Beta Was this translation helpful? Give feedback.
All reactions