我正在ReactJS中创建一个网页,用于发布(包含文本、图像、视频),就像Reddit一样,可以无限滚动.我已经创建了一个单独的post组件,该组件将提供所需的数据.我正在使用axios从MySQL获取多篇帖子.此外,我还在我的项目中实现了reduxstore .

我还添加了投票后.目前,我正在reduxstore 中存储来自db的所有帖子.如果用户向上投票或向下投票,则该更改将在redux存储区和数据库中进行,并且网页可以轻松地重新呈现元素.

使用redux store是否可行,因为数据很快就会增加,可能会增加数百万甚至更多?

我以前使用useState挂钩存储所有数据.但这样一来,我就有了动态重新渲染的问题,因为每次用户投票时,我都必须设置状态.

如果有人有什么有效的方法,请帮忙.

推荐答案

似乎这个问题远远超出了一个主题.让我们将其分解为主要部分:

  1. 你说你目前正在使用redux来存储帖子,并随着更新更新投票数.问题是,在您的情况下,这个状态实际上不是一个状态(或者至少是大部分).这是一个常见的误解,即对待来自API状态的任何数据.在大多数情况下,它不是状态,而是缓存.您还需要一种工具,使使用缓存更容易.我建议试试react-queryswr之类的.这样,您将避免大量样板代码,并将服务器数据缓存管理交给库.
  2. 这里有几件事要考虑.首先,您需要弄清楚如何检测何时预加载更多帖子.您可以使用IntersectionObserver.或者您可以使用NPM中的一些fance库来为您实现这一点.其次,如果您的目标是数百万条记录,那么您需要考虑虚拟化.简而言之,它从DOM中删除了视口之外的元素,这样浏览器就不会耗尽所有内存并在一段时间后消亡(这将是一个很好的特性tho).本文将是一个很好的起点:https://levelup.gitconnected.com/how-to-render-your-lists-faster-with-react-virtualization-5e327588c910.
  3. 你说你正在数据库中存储所有帖子,但没有提到任何API层.如果你的目标是数百万美元,而这不是一个仅仅用于练习技能的项目,我建议在客户端应用程序和数据库之间设置一个API.这里有一些很好的问题,您可以找出为什么直接从客户端连接到数据库不是最好的主意:onetwo.

Mysql相关问答推荐

SQL中的搜索模式

使用复合主键更新后的MySQL触发器失败

计算男生的人数和女生的人数.学生是有入学记录的人

外部磁盘上的MySQL表空间和数据文件

Mysql - 按周分组但从 1 开始计数

在带有 D.I 的 .NET AWS Lambda 中使用 MySql.Data

列出每年最多产的三位作家

global max_connections 和 spring.hikari.maximumPoolSize 有什么区别?

如何在Mysql中使用With和Values

根据使用 mysql 的第一个过滤结果添加更多表行

在 Presto Athena 中将字符串转换为数组

mysql错误:错误1018(HY000):无法读取'.'的目录(错误号:13)

通过数据库级​​别本身的查询反序列化

计算执行的查询数

仅在 MYSQL DATEDIFF 中显示小时数

我的 PDO 声明不起作用

如何从两个不同的日期获得年份差异?

使用 MySql,我可以对列进行排序但最后有 0 吗?

MySQL 1062 - 键 'PRIMARY' 的重复条目 '0'

如何从邮箱地址中 Select 域名