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

我需要作者您的技术指导,正在阅读修改源码 #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)

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

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

No branches or pull requests

3 participants