如何使用 Reactive Record 延迟加载处理加载状态
How to handle loading state with Reactive Record lazy loading
我希望有人能告诉我在顶级 Reactrb 组件中处理加载状态的最佳方法,它是通过 Reactive Record 延迟加载数据。
我的目标是顶级组件显示等待状态,而其子组件获取它们需要渲染的数据,然后快速渲染整个组件。我不希望带有子组件的单独等待状态,因为这会在有大量数据要加载时创建 'jerky' 体验。
如果你考虑这个例子:
class PostsWithCommentsList < React::Component::Base
before_mount do
state.posts! Post.all
end
def everything_loaded?
#how do I know when all posts and all comments are loaded?
end
def render
div do
ul do
state.posts.each do |post|
li { post.title }
ul do
post.comments.each do |comment|
li { comment.body }
end
end
end
end if everything_loaded?
end
end
end
如何获得 everything_loaded?检查所有帖子和所有评论是否已加载以便组件快速流畅地绘制的方法?
非常欢迎大家的帮助。谢谢
ReactiveRecord 的一项功能尚未完成,但已到了可以派上用场的地步。它称为 WhileLoading,目标是能够说出如下内容:
def render
div do
ul do
state.posts.each do |post|
li { post.title }
ul do
post.comments.each do |comment|
li { comment.body }
end
end
end
end.while_loading do
# Some kind of loading screen
end
end
end
基本上,您会在要在加载时显示内容的元素末尾调用该方法,然后传入您想要显示的内容。在引擎盖下,这只会 show/hide 元素而不是不渲染。
不幸的是,这还没有完全发挥作用,但这是它的使用方法。
after_mount do
@initial_data_loaded = false
Element['.content-loading'].hide
Element['.loading-div'].show
end
def toggle_loading
return if @initial_data_loaded
if ReactiveRecord::WhileLoading.quiet?
Element['.content-loading'].show
Element['.loading-div'].hide
@initial_data_loaded = true
end
end
def render
div do
div.content_loading do
ul do
state.posts.each do |post|
li { post.title }
ul do
post.comments.each do |comment|
li { comment.body }
end
end
end
end
end
div.loading_div(style: { display: 'none' }) do
# Your loading screen
end
end.tap { toggle_loading }
end
它有点脏,但在我们让 WhileLoading 正常工作之前,这应该可以满足您现在的需求。基本上,内容需要被渲染以便 ReactiveRecord 知道获取和应用该数据,所以我们需要做一个 show/hide 而不是在数据存在之前阻止它渲染。
我希望有人能告诉我在顶级 Reactrb 组件中处理加载状态的最佳方法,它是通过 Reactive Record 延迟加载数据。
我的目标是顶级组件显示等待状态,而其子组件获取它们需要渲染的数据,然后快速渲染整个组件。我不希望带有子组件的单独等待状态,因为这会在有大量数据要加载时创建 'jerky' 体验。
如果你考虑这个例子:
class PostsWithCommentsList < React::Component::Base
before_mount do
state.posts! Post.all
end
def everything_loaded?
#how do I know when all posts and all comments are loaded?
end
def render
div do
ul do
state.posts.each do |post|
li { post.title }
ul do
post.comments.each do |comment|
li { comment.body }
end
end
end
end if everything_loaded?
end
end
end
如何获得 everything_loaded?检查所有帖子和所有评论是否已加载以便组件快速流畅地绘制的方法?
非常欢迎大家的帮助。谢谢
ReactiveRecord 的一项功能尚未完成,但已到了可以派上用场的地步。它称为 WhileLoading,目标是能够说出如下内容:
def render
div do
ul do
state.posts.each do |post|
li { post.title }
ul do
post.comments.each do |comment|
li { comment.body }
end
end
end
end.while_loading do
# Some kind of loading screen
end
end
end
基本上,您会在要在加载时显示内容的元素末尾调用该方法,然后传入您想要显示的内容。在引擎盖下,这只会 show/hide 元素而不是不渲染。
不幸的是,这还没有完全发挥作用,但这是它的使用方法。
after_mount do
@initial_data_loaded = false
Element['.content-loading'].hide
Element['.loading-div'].show
end
def toggle_loading
return if @initial_data_loaded
if ReactiveRecord::WhileLoading.quiet?
Element['.content-loading'].show
Element['.loading-div'].hide
@initial_data_loaded = true
end
end
def render
div do
div.content_loading do
ul do
state.posts.each do |post|
li { post.title }
ul do
post.comments.each do |comment|
li { comment.body }
end
end
end
end
end
div.loading_div(style: { display: 'none' }) do
# Your loading screen
end
end.tap { toggle_loading }
end
它有点脏,但在我们让 WhileLoading 正常工作之前,这应该可以满足您现在的需求。基本上,内容需要被渲染以便 ReactiveRecord 知道获取和应用该数据,所以我们需要做一个 show/hide 而不是在数据存在之前阻止它渲染。