Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

我需要作者您的技术指导,正在阅读修改源码 #41

Closed
JinJieTan opened this issue Sep 12, 2019 · 15 comments
Closed

我需要作者您的技术指导,正在阅读修改源码 #41

JinJieTan opened this issue Sep 12, 2019 · 15 comments
Labels
question Further information is requested

Comments

@JinJieTan
Copy link

我需要作者的技术指导,正在阅读修改源码,

感谢作者写出这么强大的库,但是在我的业务应用场景中(非常复杂),需要改动,所以想了解下这个库整体的架构设计思路。 替换规则,可以简要说明一下吗?我打算应用在我比较复杂的项目中。

@ShenChang618
Copy link
Member

@JinJieTan 一般来说修改库并不是一个很好的选择,如果不涉及安全,可以和我讲下需求。

设计思路文档中有写是通过 React.createPortal API 来保证 React 的节点不被卸载,如果卸载那肯定会重新初始化节点的;这个 API 有一个问题就是 context 可能会出现问题,具体这个 #36 中有讲。

在确保可以不被卸载的情况下,每次卸载时,都把相应 DOM 移动到最外层的一个节点中,每次激活时,把外层节点中对应的 DOM 移动到正确的位置。

@ShenChang618 ShenChang618 added the question Further information is requested label Sep 16, 2019
@JinJieTan
Copy link
Author

JinJieTan commented Sep 16, 2019

当我使用了虚拟列表,然后使用keep-alive缓存右边的每一条消息的dom节点后

就会这样

虚拟列表配合keep-alive

虚拟列表使用的react-window, 每次只会渲染当前可见的消息

@JinJieTan
Copy link
Author

JinJieTan commented Sep 16, 2019

正常情况是这样 不使用react-keep-alive ,只使用虚拟列表

不使用keep-alive

@JinJieTan
Copy link
Author

每次进入新的会话,只会渲染当前可见的会话消息。

如果使用keepAlive,就会出现第一种情况。 滚动条抖动 内容颤抖

@ShenChang618
Copy link
Member

@JinJieTan 是把会话缓存了吗,比方说每次进入对应会话都会进入缓存的会话位置?

@JinJieTan
Copy link
Author

@Sam618 我是把会话中的每一条消息缓存了。不是整个会话窗口哦

@JinJieTan
Copy link
Author

@Sam618 因为这种频繁变化的会话如果缓存整个窗口,会造成发消息不重新渲染。。

@JinJieTan
Copy link
Author

重现keep-alive
滚动条滚动到最后,就会抖动很厉害,然后跳回到上面来

@JinJieTan
Copy link
Author

虚拟列表的机制是只渲染当前可见的dom节点,当滚动条滚动时候,会频繁替换dom节点,而这个节点刚好是我缓存的每一条消息,会是这个原因吗

@ShenChang618
Copy link
Member

@JinJieTan 感觉把会话里面的消息通过 KeepAlive 来缓存并不是很好耶,如果说缓存会话界面倒还可以,可能会有这个需求;但是缓存每一条消息感觉应该用不上吧?

@JinJieTan
Copy link
Author

@Sam618 那我可以像Vue那样使用include配合标示,实现动态的keep-alive吗? 因为我初始进入这个界面时候不能缓存,否则他是一个空的界面。

@ShenChang618
Copy link
Member

@JinJieTan 这样是可以的,可以和我说下需求吗?总感觉这里用不上这个😂

@JinJieTan
Copy link
Author

JinJieTan commented Sep 16, 2019

像这样, 我初始点击进入会话框是需要去sqlite中拉取数据,但是这时候直接缓存了,就没有数据,然后是空白,只有切换后才会更新。 而且我发送消息后,对话框也是无法更新的

缓存对话框

@ShenChang618
Copy link
Member

@JinJieTan 要不我们加个微信聊吧😂(s2696922797c)

@dengnan123
Copy link

@JinJieTan 要不我们加个微信聊吧😂(s2696922797c)

看你们聊的正激情着呢,后续没了。。。

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

3 participants