当前位置: 首页 > news >正文

前端面试问题:子组件的某一个方法调用执行逻辑由父组件的属性状态变化来决定

面试官:请你讲讲你在该项目中遇到的问题是什么?你怎么解决这个问题?

答:我的回答:该项目的实现过程中我确实遇到了问题:【我会给大家整理回答思路和角度,那那么遇到这样的问题也可借鉴这种思路进行阐述】

层次一:分析页面:【原型图如下】

6f3c8c8bb79d495292d4bc480ae108fb.png

 

(1)发现问题:

  • 当用户首次打开查看爱好的详情页面时,页面是空白的,没有任何内容显示。

6eafc873df45430291fc3173c3b450f6.png

  • 当用户再次打开查看爱好的详情页面时,页面是有内容显示的。

8ce799cf39c543319032f01d669c0ff2.png

(2)分析问题:

在用户点击打开"查看爱好"按钮后,保存接口是在2秒后才开始执行的。这意味着,当页面第一次调用详情接口时,所需的数据还未保存完成,因此页面无法获取到任何内容,从而呈现为空白状态。这个问题的关键在于,页面的数据加载时机与数据保存的时机不匹配。页面在用户操作后立即尝试获取数据,但此时数据还未保存完成,因此获取不到任何内容。

(3)解决问题:

采用数据监听的方式,在保存接口执行完成后,自动触发页面的数据重新获取,从而确保页面能展示最新的数据。

层次二:分析代码:

(4)实现思路:

这个问题涉及到一个父子组件的通信问题。父组件有一个isSave属性,初始值为false。在父组件的save方法中,会在2秒后将isSave设置为true。子组件通过props接收到isSave属性,并在open方法中根据isSave的值来控制loading的显示和隐藏。但是,由于open方法是在子组件初始化时就调用的,所以当父组件的save方法执行结束时,子组件中的isSave仍然为false,只有在子组件再次调用open方法时,才能检测到isSave的变化。

(5)分析思路找到重难点:

要解决这个问题,我们需要想办法让子组件在初始化(初次调用open方法)时就能感知到isSave属性的变化。这可以通过使用Vue的watch功能来实现。当isSave属性发生变化时,子组件可以及时更新loading的状态。

(6)代码实现(实现过程):

ee65490eccce425fb9eef87d7d515511.png

3df0e844a04f4b488b3cb008522e4e7d.png 

  • 首先,在子组件的data中定义一个loading属性,用于控制loading状态的显示。

  • 然后,在open方法中,根据当前的isSave属性来设置loading的值。如果isSave为false,则设置loading为true,表示加载中。

  • 接下来,在watch选项中,监听isSave属性的变化。当isSave变为true时,将loading设置为false,表示加载完成。

(7)知识点应用:

  • props用于在父子组件间传递数据。

  • data用于定义组件的状态数据。

  • methods用于定义组件的方法。

  • watch用于监听数据的变化,并执行相应的操作。

  • 利用v-if指令控制元素的显示和隐藏。

 

相关文章:

  • .vimrc 配置项
  • Golang反射
  • Android Notes
  • ORA-08189: 因为未启用行移动功能, 不能闪回表问题
  • leetcode及牛客网二叉树相关题、单值二叉树、相同的树、二叉树的前序、中序、后序遍历、另一棵树的子树、二叉树的遍历等的介绍
  • Presto 从提交SQL到获取结果 源码详解(3)
  • qt+ffmpeg 实现音视频播放(四)之音视频同步
  • k8s——Pod进阶(资源限制和探针)
  • 解决 Git commit 或 Git merge 跑到 VIM 里面去了
  • C#中的数组探索
  • C#面:.Net中会存在内存泄漏吗,请简单描述
  • python数据库操作
  • 校园导航系统C++
  • ReDos攻击浅析
  • 【揭秘】如何借助聚道云软件连接器,实现差旅管理新飞跃!
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 3.7、@ResponseBody 和 @RestController
  • angular2开源库收集
  • cookie和session
  • Create React App 使用
  • Fundebug计费标准解释:事件数是如何定义的?
  • iOS 系统授权开发
  • java8 Stream Pipelines 浅析
  • Java程序员幽默爆笑锦集
  • node-glob通配符
  • Octave 入门
  • PHP面试之三:MySQL数据库
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • web标准化(下)
  • 阿里云前端周刊 - 第 26 期
  • 对象管理器(defineProperty)学习笔记
  • 解析 Webpack中import、require、按需加载的执行过程
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 目录与文件属性:编写ls
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • linux 淘宝开源监控工具tsar
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 阿里云重庆大学大数据训练营落地分享
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • ()、[]、{}、(())、[[]]命令替换
  • (C++17) std算法之执行策略 execution
  • (C语言)共用体union的用法举例
  • (pojstep1.1.2)2654(直叙式模拟)
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (南京观海微电子)——示波器使用介绍
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (已解决)什么是vue导航守卫
  • (原)本想说脏话,奈何已放下