日常开发记录-正确的prop传参,reduce搭配promise的使用

日常开发记录-正确的prop传参,reduce搭配promise的使用

  • 1.正确的prop传参
  • 2.reduce搭配promise的使用

1.正确的prop传参

一般会的父组件传参子组件

//父组件
<A :demodata.sync="testData" :listData.sync="testData2"></A>
data () {
    return {
      testData: {
        content: '',
        textStyle: {
          fontsize: '14px',
        },
      },
      testData2: [
        {
          content: '11',
          textStyle: {
            fontsize: '14px',
          },
        },
      ],
    }
  },
//子组件
<el-input v-model="demodata.content"></el-input>

然后子组件v-model,看着和使用起来是可以达到双向绑定的,但是是不推荐这样改的。
在这里插入图片描述

//子组件
<template>
  <div>
    {{ demodata }}
    <!-- 不要直接修改 props,使用事件通知父组件更新
使用 .sync 修饰符或 v-model 实现双向绑定,这种感觉单个属性可以,类似“监听”整个对象数组貌似不太行 -->
    <el-input :value="demodata.content" @input="changeInput"></el-input>

    <el-table :data="localData">
      <el-table-column prop="content" label="姓名"></el-table-column>
    </el-table>
    <el-button @click="add">添加</el-button>
  </div>
</template>
<script>
export default {
  props: {
    demodata: {
      type: Object,
      default: () => { }
    },
    listData: {
      type: Array,
      default: () => []
    }
  },
  data () {
    return {
      localData: [...this.listData]
    }
  },
  watch: {
    listData: {
      handler (newVal) {
        this.localData = [...newVal]
      },
      deep: true
    }
  },

  mounted () {
  },
  methods: {
    changeInput (val) {
      this.$emit('update:demodata', {
        ...this.demodata,
        content: val
      })
    }, add () {
      this.localData.push({ name: 'test' })
      this.$emit('update:listData', [...this.localData])
    }

  }
}
</script>

还有种父组件v-model的写法

//父组件
 <A v-model="testData3"></A>
   testData3: {
        content: '',
        textStyle: {
          fontsize: '14px',
        },
      },

//子组件
<template>
  <div>
    {{ demodata }}
    <el-input :value="demodata.content" @input="updateContent"></el-input>
  </div>
</template>
<script>
export default {
  model: {
    prop: 'demodata',
    event: 'update:demodata'
  },
  props: {
    demodata: {
      type: Object,
      default: () => { }
    },
  },
  methods: {
    updateContent (val) {
      this.$emit('update:demodata', { ...this.demodata, content: val });
    }
  }
}
</script>

子组件的写法要注意,model选项里的prop和event都是自定义的,但是要一一对应。
在 Vue 2 中,一个组件上默认只能使用一个 v-model。这是因为 v-model 在 Vue 2 中主要是作为语法糖,用于简化父子组件间的双向数据绑定,它默认绑定到子组件的 value 属性上,并监听 input 事件(除非通过 model 选项进行了自定义)。

然而,如果你需要在 Vue 2 中实现多个双向数据绑定,你可以使用 .sync 修饰符作为替代方案。.sync 修饰符允许你绑定一个对象或多个属性,并在子组件中通过触发特定格式的事件(update:属性名)来更新父组件中的数据。

2.reduce搭配promise的使用

  logInOrder (urls) {
      const textPromises = urls.map((url) => {
        return fetch(url)
          .then((response) => response.json()) // 修改为 json() 因为返回的是 JSON 数据
          .then((data) => JSON.stringify(data, null, 2)) // 格式化输出
      })
      console.log('log', textPromises)
      return textPromises.reduce((chain, textPromise) => {
        console.log('chain', chain,'textPromise', textPromise)
        return chain
          .then(() => textPromise)
          .then((text) => {
            console.log('获取到的数据:\n', text)
            console.log('------------------------')
            return text
          })
      }, Promise.resolve())
    },

reduce里面的代码有点没太理解,本来一般也少写,特别是then(() => textPromise)这没太看懂,改下写法:

logInOrder(urls) {
  const textPromises = urls.map(url => {
    return fetch(url)
      .then(response => response.json())
      .then(data => JSON.stringify(data, null, 2));
  });

  return textPromises.reduce((chain, textPromise) => {
    return chain.then(() => {
      return textPromise.then(text => {
        console.log('获取到的数据:\n', text);
        console.log('------------------------');
        return text; 
      });
    });
  }, Promise.resolve());
}

现在看得清楚了多,看一次的执行,就是轮询调用promise.then。而且有return text和没有return text的每次chain也是不一样的。

//调用实例
    const a = this.logInOrder([
      'https://jsonplaceholder.typicode.com/posts/1',
      'https://jsonplaceholder.typicode.com/posts/2',
      'https://jsonplaceholder.typicode.com/posts/3',
      'https://jsonplaceholder.typicode.com/posts/4',
      'https://jsonplaceholder.typicode.com/posts/5'
    ])
    console.log('a', a)

猜猜它的打印结果呢。
在这里插入图片描述
有点出乎我的意料。。。,怎么也不会是这个结果嘛感觉。自己想的理想输出是先打印chain,然后是获取到的数据,最后再是a的值,而且a也不应该是一个promise吧。这段代码里有很多的return,第一个return是函数整体的返回值给return出去,第二个return是reduce函数里传递给下一个的,第三个return是为了按顺序将多个异步按顺序串起来。最后一个return是整个函数要返回的值。
在这里插入图片描述
之所以现在的打印结果是上面的这个,其实可以当成先执行的同步,再执行到异步代码。把最后的结果换个写法

 async mounted () {
    const a = await this.logInOrder([
      'https://jsonplaceholder.typicode.com/posts/1',
      'https://jsonplaceholder.typicode.com/posts/2',
      'https://jsonplaceholder.typicode.com/posts/3',
      'https://jsonplaceholder.typicode.com/posts/4',
      'https://jsonplaceholder.typicode.com/posts/5'
    ])
    console.log('a', a)
  },
或则 
 mounted () {
   this.logInOrder([
      'https://jsonplaceholder.typicode.com/posts/1',
      'https://jsonplaceholder.typicode.com/posts/2',
      'https://jsonplaceholder.typicode.com/posts/3',
      'https://jsonplaceholder.typicode.com/posts/4',
      'https://jsonplaceholder.typicode.com/posts/5'
    ]).then(a =>{
    console.log('a', a)
    })
  },

打印出来的结果就是我理想中的了。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923181.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows系统电脑安装TightVNC服务端结合内网穿透实现异地远程桌面

文章目录 前言1. 安装TightVNC服务端2. 局域网VNC远程测试3. Win安装Cpolar工具4. 配置VNC远程地址5. VNC远程桌面连接6. 固定VNC远程地址7. 固定VNC地址测试 前言 在追求高效、便捷的数字化办公与生活的今天&#xff0c;远程桌面服务成为了连接不同地点、不同设备之间的重要桥…

IDEA2019搭建Springboot项目基于java1.8 解决Spring Initializr无法创建jdk1.8项目 注释乱码

后端界面搭建 将 https://start.spring.io/ 替换https://start.aliyun.com/ 报错 打开设置 修改如下在这里插入代码片 按此方法无果 翻阅治疗后得知 IDEA2019无法按照网上教程修改此问题因此更新最新idea2024或利用插件Alibaba Clouod Toolkit 换用IDEA2024创建项目 下一步…

Paper -- 洪水深度估计 -- 利用图像处理和深度神经网络绘制街道照片中的洪水深度图

基本信息 论文题目&#xff1a;Flood depth mapping in street photos with image processing and deep neural networks 中文题目: 利用图像处理和深度神经网络绘制街道照片中的洪水深度图 作者及单位&#xff1a; Bahareh Alizadeh Kharazi&#xff0c;美国得克萨斯州立大…

准备阶段 AssetChecker性能分析工具的使用

UPR资源检测工具AssetChecker的使用 AssetChecker主要功能 支持所有版本的Unity项目 不依赖UnityEditor,无需安装绿色运行 检测速度极快&#xff0c;可在UPR中查看结果和修改建议 支持命令模式&#xff0c;可以CI/CD工具集成&#xff0c;实现自动化检测 检测库持续更新 支持A…

【Python】分割秘籍!掌握split()方法,让你的字符串处理轻松无敌!

在Python开发中&#xff0c;字符串处理是最常见也是最基础的任务之一。而在众多字符串操作方法中&#xff0c;split()函数无疑是最为重要和常用的一个。无论你是Python新手&#xff0c;还是经验丰富的开发者&#xff0c;深入理解并熟练运用split()方法&#xff0c;都将大大提升…

数字图像处理(4):FPGA中的定点数、浮点数

&#xff08;1&#xff09;定点数&#xff1a;小数点固定在数据的某一位置的数&#xff0c;可以分为定点整数和定点小数和普通定点数。定点数广泛应用于数字图像处理&#xff08;图像滤波、图像缩放&#xff09;和数字信号处理&#xff08;如FFT、定点卷积&#xff09;中。 定…

重新定义社媒引流:AI社媒引流王如何为品牌赋能?

在社交媒体高度竞争的时代&#xff0c;引流已经不再是单纯追求流量的数字游戏&#xff0c;而是要找到“对的用户”&#xff0c;并与他们建立真实的连接。AI社媒引流王通过技术创新和智能策略&#xff0c;重新定义了社媒引流的方式&#xff0c;帮助品牌在精准触达和高效互动中脱…

tcp/ip异常断开调试笔记——lwip

问题一&#xff1a;异常掉线 异常断开模拟 1、单片机端做服务端&#xff08;只监听一个客户端&#xff09;&#xff0c;电脑做客户端连接 2、尝试连接确定通信正常&#xff0c;断开网线。电脑客户端点击断开 3、经过一段时间&#xff08;超过tcp/ip 3次握手时间&#xff09…

【大数据学习 | Spark-Core】Spark的改变分区的算子

当分区由多变少时&#xff0c;不需要shuffle&#xff0c;也就是父RDD与子RDD之间是窄依赖。 当分区由少变多时&#xff0c;是需要shuffle的。 但极端情况下&#xff08;1000个分区变成1个分区)&#xff0c;这时如果将shuffle设置为false&#xff0c;父子RDD是窄依赖关系&…

低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试

本节目录 一、设计思路 二、loop环回模块 三、仿真模块 四、仿真验证 五、上板验证 六、往期文章链接本节内容 一、设计思路 串口数据的收发回环测试&#xff0c;最简单的硬件测试是把Tx和Rx连接在一起&#xff0c;然后上位机进行发送和接收测试&#xff0c;但是需要考虑到串…

C#基础上机练习题

21.计算500-800区间内素数的个数cn&#xff0c;并按所求素数的值从大到小的顺序排列&#xff0c;再计算其间隔加、减之和&#xff0c;即第1个素数-第2个素数第3个素数-第4个素数第5个素数……的值sum。请编写函数实现程序的要求&#xff0c;把结果cn和sum输出。 22.在三位整数…

2024年11月25日Github流行趋势

项目名称&#xff1a;flux 项目维护者&#xff1a;timudk jenuk apolinario zeke thibautRe项目介绍&#xff1a;FLUX.1模型的官方推理仓库。项目star数&#xff1a;17,381项目fork数&#xff1a;1,229 项目名称&#xff1a;screenshot-to-code 项目维护者&#xff1a;abi cle…

运维Tips:Docker或K8s集群拉取Harbor私有容器镜像仓库配置指南

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Docker与Kubernetes集群拉取Harbor私有容器镜像仓库配置 描述:在现在微服务、云原生的环境下,通常我们会在企业中部署Docker和Kubernetes集群,并且会在企业内部搭建Harbor私有镜像仓库以保证开发源码安全,以及加快…

Qt:信号槽

一. 信号槽概念 信号槽 是 Qt 框架中一种用于对象间通信的机制 。它通过让一个对象发出信号&#xff0c;另一个对象连接到这个信号的槽上来实现通信。信号槽机制是 Qt 的核心特性之一&#xff0c;提供了一种灵活且类型安全的方式来处理事件和数据传递。 1. 信号的本质 QT中&a…

《硬件架构的艺术》笔记(七):处理字节顺序

介绍 本章主要介绍字节顺序的的基本规则。&#xff08;感觉偏软件了&#xff0c;不知道为啥那么会放进《硬件架构的艺术》这本书&#xff09;。 定义 字节顺序定义数据在计算机系统中的存储格式&#xff0c;描述存储器中的MSB和LSB的位置。对于数据始终以32位形式保存在存储器…

【Linux】内核的编译和加载

Linux内核是操作系统的核心&#xff0c;负责管理系统的硬件资源&#xff0c;并为用户空间的应用程序提供必要的服务。内核的编译和加载是操作系统开发和维护的重要环节。本文将详细介绍Linux内核的编译过程以及如何加载内核到系统中。 1. 引言 Linux内核的编译是一个复杂的过…

【Linux】DHCP服务实验

DHCP实验 实验前提 1、两个linux操作系统,一个为服务器端,一个为客户端 2、两个操作系统设置为仅主机模式 3、在客户端-虚拟网络编辑器-仅主机模式VMnet1-关闭DHCP 实验步骤 新建虚拟机

2022年计算机网络408考研真题解析

第一题&#xff1a; 解析&#xff1a;网络体系结构-数据链路层 在ISO网络参考模型中&#xff0c;运输层&#xff0c;网络层和数据链路层都实现了流量的控制功能&#xff0c;其中运输层实现的是端到端的流量控制&#xff0c;网络层实现的是整个网络的流量控制&#xff0c;数据链…

详解 【AVL树】

AVL树实现 1. AVL的概念AVL树的实现2.1 AVL树的结点结构2.2 AVL树的插入2.2.1 AVL树的插入的一个大概操作&#xff1a;2.2.2 AVL树的平衡因子更新2.2.3 平衡因子的停止条件2.2.4 再不考虑旋转的角度上实现AVL树的插入 2.3 旋转2.3.1 旋转的原则2.3.2 右单旋2.2.3 右单旋代码实现…

Python 爬虫从入门到(不)入狱学习笔记

爬虫的流程&#xff1a;从入门到入狱 1 获取网页内容1.1 发送 HTTP 请求1.2 Python 的 Requests 库1.2 实战&#xff1a;豆瓣电影 scrape_douban.py 2 解析网页内容2.1 HTML 网页结构2.2 Python 的 Beautiful Soup 库 3 存储或分析数据&#xff08;略&#xff09; 一般爬虫的基…