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

magix中的view自驱与他驱更新 #106

Open
xinglie opened this issue Apr 28, 2023 · 0 comments
Open

magix中的view自驱与他驱更新 #106

xinglie opened this issue Apr 28, 2023 · 0 comments

Comments

@xinglie
Copy link
Owner

xinglie commented Apr 28, 2023

view通常可以接受其它参数以决定自己如何展示

我们很难去界定view归属类型,比如是组件通用业务等,因为它们之间的身份是可以随时互相转化的,甚至是包含多个类型的。

我们可以从另外一个角度来根据更新方式来划分

他驱

如果一个view需要的原始数据统一由外部传入,内部仅做加工。这种view就是他驱的,比如通用基础组件等。

像下拉框,内部并不会去请求接口或其它动作自己去拿数据,而是由参数统一传入。

自驱

如果一个view内部会请求接口或其它动作自己去获取原始数据,这种view就是自驱的,比如业务view等。

更新

view变化的前提条件是数据变化,数据变化后我们需要一定的策略去识别出view变化需要的最小改动,这样更新才能更快。而数据变化中对象是最难的,考虑以下代码

<mx-dropdown *list="{{#object.list1}}"/>
<mx-dropdown *list="{{#object.list2}}"/>

要想在list1变化时仅更新第一个下拉框是很难的,以vue为代表的数据响应式就需要提前对数据做代理,这也是一笔性能开销。以react为代表的则是整体更新,除非下拉框告诉react数据有没有变化。

这仅是一个示例,项目中的数据会更复杂,比如

<mx-vframe src="../common/picker" *id="{{=user.id}}" *list="{{#goods}}" *picked="{{#cart.selected}}"/>

像这样的数据传递情况,夹杂着嵌套对象时,很难精准识别何时去更新common/picker这个view。这种只发生在他驱更新的情况下,稍不留意就会造成view不必要的更新。

在magix5中,重新做了层更新机制,虽然不会卡顿,但这是一个兜底的方案,不应该在开发中依赖。而应该在开始设计好view之间的嵌套关系,更新机制等。

变他驱为自驱

view之间为什么要传递数据?是因为要共享这份数据,假如我们在另外一个地方存储着这份数据,同时每个view可监听到数据变化,那view之间是不是就不需要传递参数了?不传递参数就意味着view的更新只能是自己驱动,别人是不会引起你的更新的。这样在后期调试代码也更方便。

现在尝试数据store的方案把需要共享的数据统一外部管理,减少view之间的数据传递。

备注

并不是所有的view都是这样变化,像通用基础组件这种肯定是他驱的并不适用这个方式。

如果view内部需要去主动获取数据且其它view也可能使用这份数据的时候,那这些view就最好做成自驱

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant