Skip to content
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

组件根节点是组件时,s-data 数据存放方式 #498

Closed
harttle opened this issue May 29, 2020 · 3 comments
Closed

组件根节点是组件时,s-data 数据存放方式 #498

harttle opened this issue May 29, 2020 · 3 comments

Comments

@harttle
Copy link
Member

harttle commented May 29, 2020

这是一个 SSR 和反解配合的问题。目前能够想到的几种场景(和 SSR 里打算怎么处理,可以调整):

  1. 组件根节点是一个组件,那么 s-data 放到最终渲染出来的根 DOM 节点开标签后。可能存在递归。
  2. 组件根节点是一个组件,且子组件的数据和根组件数据不一致时(比如使用这个组件时 Attribute 上有赋值,或者组件 inited 和 initData 对组件数据进行修改),s-data 表示子组件的数据。
  3. 组件根节点是一个 fragment,s-data 放在 fragment 的所有内容之前(因为渲染出来第一个节点可能是文字)。
  4. 组件根节点是一个条件(if)且节点名是 template 或 fragment,s-data 放在 if 的所有内容之前(因为渲染出来第一个节点可能是文字)。
  5. 组件根节点是一个条件(if)且节点名不是 template 也不是 fragment,s-data 放在它渲染出来的第一个 DOM 节点的开标签后(可能是一个组件,可能存在递归)。
  6. 组件根节点是一个循环(for),s-data 放在所有 for 的 item 渲染内容之前。

如上有些写法不一定被 san 核心允许,但 ssr 都要有所行为,就都描述了。

@errorrik
Copy link
Contributor

errorrik commented Jun 1, 2020

组件反解和ssr的设计都属于san核心设计的要素,虽然ssr是独立仓库。

反解的入口是一个组件, root element 是一个 HTMLElement 是组件的一个约束条件。

  • 入口组件通常是最上层组件,包含在一个 HTMLElement 内是合理的
  • root element 是 fragment、if、for 等节点的特殊组件,通常用于作为子组件时,避免过深的组件层级。其作为根组件,意义不大
  • root element 是 if、for 等节点的特殊组件,通常有具体的业务意义。其作为根组件,意义不大

综上,3 4 5 6点,在ssr实现时,感觉应当报错并说明不支持

@harttle
Copy link
Member Author

harttle commented Jun 1, 2020

入口组件的根元素是一个组件的情况也需要考虑。因为这个子组件(或递归子组件)的根元素也可能是 fragment、if、for 这种,最终导致整个入口没有包含到一个 DOM 标签里面。一系列事情都比较 trivial,这个点需要很多测试样例

@errorrik
Copy link
Contributor

errorrik commented Jun 1, 2020

入口组件的根元素是一个组件是允许的,但这个组件也必须符合 root element 是一个 HTMLElement

errorrik added a commit that referenced this issue Jun 1, 2020
harttle added a commit to baidu/san-ssr that referenced this issue Jun 1, 2020
遗留问题:

- 编译期检测:根元素使用了 s-if、s-for、fragment 等情况
- 反解:s-data 目前实现为子组件的数据,待确认 baidu/san#498
errorrik added a commit that referenced this issue Jun 1, 2020
@errorrik errorrik closed this as completed Jun 8, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants