我的博客上有一个评论系统。事情是通过WebSockets实时更新注释。当然,在更新注释时,所有者必须能够编辑其注释。我要启用就地编辑(这意味着注释将被文本框和“保存/放弃”按钮替换)。我的React应用程序订阅套接字事件并comments
在组件状态下更改数组。这意味着,当用户正在编辑评论时,如果有新内容出现,则该编辑将被残酷地停止。
话虽如此,我想到了两种可能的方法:1.在用户编辑评论时,停止实时更新(即暂时忽略套接字事件)2.继续更新评论,但继续在评论编辑器上滚动(我不这样做)不知道该如何应对)
我认为在用户编辑评论时停止实时更新是愚蠢的,所以我问你,在更新评论时应如何将编辑器保留在那里?
有关我的应用程序结构的更多信息:
我已经得到了成分<PostComments />
,其state
包含阵列comments
。该数组被渲染为一堆<Comment />
:
renderComments = () => {
const { comments } = this.state;
return comments.map( comment => {
return (
<Comment key={comment['comment_id']} data={comment} />
);
} );
};
该<Comment />
组件获得的静态数据来呈现(即,对象与标准形状
export const commentDataType = React.PropTypes.shape( {
comment_id: React.PropTypes.number.isRequired,
user_info: React.PropTypes.shape( {
preferred_name: React.PropTypes.string.isRequired,
profile_picture: React.PropTypes.string.isRequired,
} ).isRequired,
post_timestamp: React.PropTypes.number.isRequired,
comment_text: React.PropTypes.string.isRequired,
} );
这有点。谢谢!
从注释中的简短对话中得出结论-不管怎样,我认为最好的方法是currentlyEditing
一旦用户打开注释进行编辑,就将注释的副本单独保存在状态树中的某个位置(可能是类似的名称)。
然后,用户可以改而编辑副本,并且您可以尽可能完整地保留逻辑。
如果用户提交,则使用特定的来保存评论的更改comment_id
。
展望未来,您可以选择引入,edited_timestamp
以确保并发更新不会覆盖另一个更新,并在用户没有最新更改并希望保存编辑时显示警告。
这样,您将保持更新的更新,用户流和体验不会受到干扰,并且您将设法重用尽可能多的代码,同时仍然宽大而舒适地能够在站点处丢弃已编辑的更改。单击按钮,而无需担心副作用。
您通常可以在论坛和论坛上看到类似的行为和用户体验。或博客,与您的用例非常相似。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句