【今日文章】:1.关于 $attr $lisenner $slot 用法的思考 2. 关于父子组件传值的思考 3.关于前端日志系统搭建的思考

【今日文章】:1.关于 attr lisenner $slot 用法的思考 2. 关于父子组件传值的思考 3.关于前端日志系统搭建的思考

1.关于 attr lisenner $slot 用法的思考

定义:父组件传给子组件的数据。

  1. $attr是父组件传给子组件的数据,且在prop中没有的
    可以理解成: $attrs中包含的数据=(父组件总的传过来的数据 - 子组件props接收的数据)
  2. $lisenner:将父组件的方法,传递给子组件。
  3. $slot :将父组件的插槽,传递给子组件。
    关于使用常见的理解:可以用于二次封装组件。

举个例子,比如说二次封装el-input组件:

html 复制代码
// 父组件
  <div class="wrapper"> 
    <my-input placeholder="自定义组件" size="large" v-model="myInput">
    </my-input>
  </div>


// 子组件
// 这个时候,如果子组件中的props没有定义上面的属性,都会通过$attrs传过来
<template>
  <el-input v-bind="$attrs"></el-input>
</template>
html 复制代码
// 父组件
  <div class="wrapper"> 
    <my-input  @change="inputChange">
    </my-input>
  </div>


// 子组件通过写$listeners 来接收父组件的事件
// 子组件
<el-input v-on="$listeners"></el-input>
html 复制代码
// 父组件
    <my-input>
      <template slot="prepend">prepend</template>
      <template slot="append"> append </template>
    </my-input>


// 子组件
<template>
  <el-input>
    <template v-for="(val, key) in $slots">
      <slot :name="key"></slot>
    </template>
  </el-input>
</template>

2. 关于父子组件传值的思考

首先父子组件传值需要遵循单项数据流:

官方解释:

  1. 父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。

  2. 每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值

  3. 这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。
    个人理解:

  4. 父组件可以向子组件通过属性形式传递任意参数,当属性变化的时候,子组件中的prop会刷新成最新的值。

  5. 子组件不能修改父组件传来的数据,只能使用父组件传来的数据。

问题一:在子组件中想修改父组件传来的数据,需要怎么做?

复制一份到data中。

html 复制代码
// 子组件
prop:{
	parentVal
},
data(){
	return{
	   // 复制一份值出来
	   parentValCopy:this.parentVal
	}
}

问题二:我想把父组件传来的值修改,并且把修改后的值传给父组件,完成类似于双向绑定的操作,需要怎么操作?

  1. v2.2.0+ 可以使用v-model
  2. v2.3.0+ 可以使用.sync
html 复制代码
// 原理是一样的,这里使用    .sync

// 父组件
<template>
    <div>
        我是父子组件之间同步的数据{{data}}
        <child :data.sync='data'></child>   // 1.父组件使用 .sync
    </div>
</template>
<script>
    data(){
      return {
        data:'我是来自父组件的数据'
      }
    }
</script>



// 子组件
<template>
  <div>
    <input type="text" v-model="childData" @input="childDataChange">
  </div>
</template>
<script>
    props:{
      data:{
        default:'',
        type:String
      }
    },
    data(){
      return {
        //2.子组件复制父组件传来的值
        childData:this.data 
      }
    },
    methods:{
      // 3. 子组件触发update:data,修改值并将值传递给父组件
      childDataChange(){
        this.$emit('update:data', this.childData) 
      }
    }
</script>
html 复制代码
// 原理就是:

  <child :data='data' v-on:update:data="data = $event"></child>
  被简化成了
  <child :data.sync='data'></child>

3.关于前端日志系统搭建的思考

前端日志系统都能做啥?

  1. 对console的记录
  2. 对http网络请求的记录
  3. 能通过网页查看各个记录

系统架构:

  1. 存储各种数据
  2. 先存到浏览器本地,再上传到服务器

至于存储数据就不详细描述了,劫持console和http请求即可

关于存储到浏览器本地,可以使用IndexedDB,这里推荐Dexie.js操作数据库。

相关推荐
Rkgua6 小时前
ESModule和Commonjs模块的区别
前端·javascript
江南十四行6 小时前
ReAct Agent 基本理论与项目实战(二)
前端·react.js·前端框架
用户600071819106 小时前
【翻译】React 如何乱序流式输出 UI,却仍保持最终顺序
前端
江南十四行6 小时前
AI Agent应用类型及Function Calling开发实战(三)
服务器·前端·javascript
yqcoder6 小时前
JavaScript 数据类型全景图:从基础到进阶
开发语言·javascript·ecmascript
GISer_Jing7 小时前
AI原生全栈架构理论体系:从分布式范式演进到全链路工程化理论基石
前端·人工智能·学习·ai编程
GISer_Jing7 小时前
从“切图仔”到“增长架构师”:AI时代营销前端的范式革命
前端·人工智能·ai编程
广州华水科技7 小时前
单北斗GNSS在水库变形监测中的应用与系统安装解析
前端
xingpanvip7 小时前
星盘接口开发文档:组合三限盘接口指南
android·开发语言·前端·python·php·lua
阿拉丁的梦7 小时前
blender最好的多通道吸色工具(拾取纹理颜色排除灯光)
前端·html