当前位置: 首页 > 知识库问答 >
问题:

在React中处理api数据的最佳实践

冯皓
2023-03-14

我正在做我的第一个react项目,我有一个问题。

使用this.state,在react中处理和存储数据的最佳方法是什么?

我当前的工作流程:

  1. componentDidMount()
  2. 将数据存储在this.state(例如在this.state.account\u data中作为子对象`
  3. 使用控件的value属性中的数据,如

方法onChangeUsername(e)使用this.setState({username:e.target.value})更改this.state

因此,问题是:更改unsername控件值后,我在this.state中有两个用户名变体:this.state.account\u data.usernamethis.state.username。这需要创建另一部分代码来更新this.state.account\u data,因为我想通过UserService.update(this.state.account\u data)将新数据发送到API。

有没有更简单的方法或者什么是最佳实践?


共有1个答案

墨翔宇
2023-03-14

根据官方文档,React建议使用这个库来处理数据突变:不变性助手。

其思想是,在onChangeUsername(e)中,您将复制需要使用update函数更新的状态的原始部分。在本例中,const myNewAccountData=update(this.state.account\u data,…)然后使用this.setState({account\u data:myNewAccountData})设置新状态。

有关使用immutability helper更新嵌套对象的示例,请参见此答案。

在这里,您可以找到为什么避免嵌套对象为React状态的解释,或者至少为什么它可能被认为不是最佳实践。

 类似资料:
  • 问题内容: 我的用户数据库中有一些我希望进行加密的数据。要求时,大多数数据将需要解密,但是也有一些密码可以保持加密(过去我们会使用 pwdcompare, 但我相信现在已经过时了)。 我已经按照这里的步骤进行操作,所以现在我已经成功地加密了我的数据。 我不了解的是在运行时打开主密钥以加密/解密数据的正确方法。如果我想使用存储过程来检索加密的数据,该如何打开主密钥?我是否使用存储的proc参数传递主

  • 现在我打算创建一个更好的错误处理的“应用程序”框架,我试图寻找最佳实践,但没有找到任何 泽西文档:https://Jersey.java.net/nonav/documentation/1.9/user-guide.html#D4E443 Internet上的几个搜索:http://www.codingpedia.org/ama/error-handing-in-rest-api-with-jer

  • 问题内容: 我有一个用Go编写的Web服务,目前我将这个Global包导入到任何地方,其中包含与MongoDB的连接(通过MGO),但是我不得不说这对我来说非常讨厌。在Go中维护与数据源的连接的最佳实践是什么?我来自PHP世界,因此来自Global:S 问题答案: 导入一个将初始化对象导出为包级别变量或通过访问器/初始化程序导出的包没有错。后者也许对古典“ OOP主义者”更具吸引力。

  • 目前,我的应用程序的某些部分在将大量数据加载到报告表时遇到了速度问题。报告表中的数据是从多个表中提取的,并运行一些复杂的查询,但这是必需的。 除了优化代码,我的问题是,您个人如何处理需要向用户显示的大量数据,最佳实践是什么? 目前我正在处理所有的数据,然后通过javascript库生成数据表。 我知道的事情: 用户不需要一次看到所有数据 用户需要能够搜索所有数据 用户需要能够过滤数据 最好的方法真

  • 我们正在用REST API开发服务器,它用JSON接受和响应。问题是,如果您需要将图像从客户端上传到服务器。 注意:我也在讨论一个用例,其中实体(用户)可以有多个文件(carPhoto,licensePhoto),也可以有其他属性(name,email……),但是当您创建新用户时,您不会发送这些图像,它们是在注册过程之后添加的。 我知道这些解决方案,但每一个都有缺陷 1.使用multipart/f

  • 我正在构建一个节点应用程序,它将查询简单的和更复杂的(多连接)查询。我正在寻找关于我应该如何管理mySQL连接的建议。 我有以下几个要素: server.js:express Router1.js(虚构名称):快速路由器中间件 Router2.js(虚构名称):快速路由器中间件 我是否应该在每次请求“/router1/”时都连接到mysql,就像本例中那样,还是最好在启动时保持一个连接打开?作为: