前后端不报错&传值正常:前端接收不到数据|前后端检查问题流程

当前后端数据传输无误但前端无法显示数据时,通常是由于后端未正确查询数据库。检查流程包括:判断问题源头、前端控制台分析、网络请求验证及后端控制台排查。解决办法涉及理解callback函数的角色,确保数据从底层系统到应用层的完整传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 问题:前后端不报错&传值正常:前端接收不到数据

1.1 前端

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 后端

@RestController
@RequestMapping("/ums-user")
public class UmsUserController {
    @Resource
    IUmsUserService userService;
    @GetMapping("/page")
    ResultJson page(UmsUser umsUser) throws InterruptedException {
        System.out.println(umsUser);
        System.out.println(umsUser.getPageNo());
        System.out.println(umsUser.getPageSize());
        return ResultJson.success(new Page<>(umsUser.getPageNo(),umsUser.getPageSize()),"检验:后端是否正常传值给前端");
         }
}

在这里插入图片描述

1.3 解决

在这里插入图片描述

return ResultJson.success(userService.page(new Page<>(umsUser.getPageNo(),umsUser.getPageSize())),"解决传值问题的返回值");

在这里插入图片描述
之后开始查询数据库
在这里插入图片描述

1.4 原因:后端没查询数据库

页面没数据----->后端没查询数据库----->接受前端参数没赋值给service,直接将前端接受的参数返回给前端

前端参数两个作用:

  1. 单纯提供:当前页,一页几条数据(有问题时前端控制台依旧有:current、size)
  2. 传递到service,让service带这参数,对数据库经行【分页查询】----service没有收到参数,所以没有查询数据库。后端:控制台没有输出查询语句+前端:返回records是0

传值正常:此次报错指前后端传值功能正常(都能收到数据),但是问题也体现在此:值≠预期值。前端传后端:参数A(√),后端传前端:参数A(×),预期值是数据库数据。

2 检查问题流程

2.1 判断是前后端,谁的问题----传值

在这里插入图片描述

2.2 前端问题----控制台(Fn+F12)

2.2.1 console—看报错 :ReferenceError: params is not defined

在这里插入图片描述

2.2.1 对比前端代码

在这里插入图片描述
解决:对象。属性 才能用
在这里插入图片描述

2.2.1 network:查看自己的请求

在这里插入图片描述

2.2.2 点击请求:preview

在这里插入图片描述
由图,前端成功发送参数,后端也成功返回返回值

2.2 后端问题----控制台

3 前端问题:response is not defined

在这里插入图片描述

3.1 原因

在这里插入图片描述
括号里都是:传过来的值/函数(用形参表示)
callback(回调函数)是一个系统函数,就好像println

【index页面】
methods:{
			getTableData(){
				this.get('/ums-user/page',this.params,response => {   ---发出请求,拿返回值
					this.tableData = response               ---拿【加工2】返回值赋值给tableData
				//等价于 this.tableData = response.data.obj
				})
			},
const get = (url,params,callback) => {
	request(url,'get',params,response =>{
		callback(response.obj)           ---接收【加工1】,返回【加工2】response.obj = response.data.obj
	})
}
【request底层】
const request = (url, method, params,callback) => {
     ......
			 callback(response.data)    ----后端返回response,再返回给调用函数get返回值response.data【加工1】
		}

callback意义:如果只是在没有callback函数,我只能在request处新建接收函数response,新建一个请求发送给get,get收到值再新建一个请求发送给getTabledate。即值到谁手里,就得接收包装再发送。

callback在参数的位置():get方法内部调用callback方法后的返回值,再传给调用get方法的方法A
调用的结果,都用response(满载而归卡车)返回给调用方
1.调用get函数的函数A,需要传入3个参数
2.3个参数去向=get方法执行:
1)调用request函数:发送请求后,get拿回来response=(request的)response.data
2)调用callback函数:将1)get拿回来response,返回给index组件中调用get方法的函数

解决:
在这里插入图片描述

const get = (url,params,callback) => {
	request(url,'get',params,response =>{
		callback(response.obj)
	})
}

4 callback(回调函数)

一般情况:程序运行
▶ 程序员-------调用:接口API(application programming interface,应用编程接口)------实现:应用编程(利用各种库,编写成具某种功用的应用)-------位于底层:系统编程(编写库函数:底层函数)
▶操作员 -----开关键------机器-----零件

特殊情况:callback(回调函数)-----私人定制
▶程序员-------接口API:传入【函数1】------应用编程:传递【函数1】-------位于底层:系统编程,接收【函数1】中间函数,组装完成【特定函数2】-------应用编程:接收【特定函数2】-------API-----程序员
▶ 公民 -----办事处:传入【个人信息】------身份证系统------用【个人信息】制作身份证-------身份证系统------办事处------公民拿到【专有身份证】
callback(回调函数) =函数1/个人信息。
有一些位于底层库函数是不完整的,即:在传入一个回调函数之前,中间函数是不完整的。

### React 中保证 `props` 为空的最佳实践 为了确保在 React 或其他支持 `props` 的前端框架中递的属性为空,可以采取多种方法来验证和处理这些属性。以下是几种推荐的方法: #### 使用默认 Props 通过设置默认属性,可以在未提供特定属性的情况下自动填充缺省。这有助于防止因缺少必要参数而导致的应用程序错误。 ```javascript const BaseInfo = ({ activated = false, onStart = () =&gt; {}, onPause = () =&gt; {}, onReset = () =&gt; {}, onSplit = () =&gt; {} }) =&gt; { // Component logic here... }; ``` 这种方法简单有效,并且能够提升用户体验[^1]。 #### PropTypes 验证 利用 `prop-types` 库来进行严格的类型检查以及必填项校验。如果某个 prop 是必需的,则可以通过定义相应的规则强制开发者必须为其赋;如果满足条件,在开发环境中会抛出警告信息提醒修复问题所在之处。 ```javascript import PropTypes from &#39;prop-types&#39;; BaseInfo.propTypes = { activated: PropTypes.bool.isRequired, onStart: PropTypes.func.isRequired, onPause: PropTypes.func.isRequired, onReset: PropTypes.func.isRequired, onSplit: PropTypes.func.isRequired }; ``` 此方式仅提高了代码健壮性和可读性,还便于团队协作时保持一致的标准[^4]。 #### 运行时检测与报错机制 对于某些关键性的输入数据(如 API 请求 URL),除了静态分析外还可以加入动态判断逻辑&mdash;&mdash;即当接收符合预期的数据结构时立即中断渲染流程并给出提示。例如: ```javascript if (!url || typeof url !== &quot;string&quot;) { throw new Error(&#39;Invalid or missing URL prop&#39;); } ``` 这种做法虽然较为激进但也非常实用,特别是在构建大型复杂应用时能显著减少潜在风险点[^3]。 #### 提前过滤必要的 Prop 为了避免意外播无关紧要甚至有害的信息给子组件,应该谨慎筛选实际需要使用的那些字段。比如上述提到的例子中,如果有采用解构的方式提取所需部分的话就有可能误将额外的状态变量也一起带过去影响正常功能。 综上所述,以上四种策略可以根据具体场景灵活组合运用以达到最优效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值