LogoLogo
github
  • 💪Upupup
  • React
    • hook
    • redux
    • Router
    • umimax+nest.js 实现 权限管理系统
    • umimax + Nest.js 实现权限管理系统
  • Vue
    • effectScope 是干啥的
    • Object.assign()
    • 响应式理解
    • @babel/preset-env 问题
    • 自定义指令
    • 问题及解决
    • 🧐权限管理(动态路由)
  • docker
    • Docker 常用命令
    • Docker部署遇到的问题
    • Docker Compose 常用命令
    • docker修改daemon.json
    • jenkins
    • Jenkinsfile 语法进阶
    • nginx配置
    • 问题
    • 玩转Nginx:轻松为Docker部署的服务添加域名的完美指南
    • Docker部署前后端项目:经验分享与问题解决
  • git
    • command
    • problem
    • rebase实践
  • 前端开发面试题集
    • CSS 面试题
    • 前端工程化面试题
    • HTML 面试题
    • JavaScript 面试题
    • NestJS 面试题
    • Node.js 面试题
    • 性能优化面试题
    • React 面试题
    • 安全面试题
    • Vue 面试题
  • interviewer
    • 计算机网络
    • 性能优化
  • leetcode
    • 算法
      • 分治算法
      • 滑动窗口与双指针
        • 🦸定长滑动窗口
        • 🚴不定长滑动窗口
        • 🚴‍♂️单序列双指针
      • 回溯
      • 二分法
  • nestjs
    • mail
    • mini-order
    • nestjs
    • prisma
    • 登录注册
  • nextjs
    • 用 V0 和 Cursor 实现全栈开发:从小白到高手的蜕变
  • tauri
    • 思路
    • 自动通知应用升级
  • vite
    • vite实现原理
  • webpack
    • 资料
  • 工具
    • Eslint
    • jenkins
    • 关于cicd
  • 微信小程序
    • ScoreDeck
    • h5跳转小程序问题
  • 思路
    • carTool
  • 操作系统学习
    • Linux命令
    • 计算机是如何计数的
    • nginx
      • location
      • try_files
  • 浏览器
    • session、location
    • web crypto
    • 性能监控和错误收集与上报
    • 预请求
  • 知识点整理
    • 知识点整理
  • 面试
    • Promise
    • 备战
    • 数码3
    • 腾娱
    • 腾讯云智
    • 重复请求合并
  • 前端工程化
    • 在 pnpm Monorepo 中使用公共方法包
由 GitBook 提供支持
在本页
  • 开发问题
  • 严重的问题

这有帮助吗?

在GitHub上编辑
  1. Vue

问题及解决

开发问题

静态官网开发

1、vite项目搭建问题

2、vue-router 理解问题

3、布局问题

4、页面响应式问题

5、hooks 理解问题

vue3新后台项目开发

1、iframe 嵌入问题

权限 token获取 尺寸大小 按钮权限

2、hooks应用

3、组件设计

写的有点乱 分析问题方向有问题 + 有些需求不够明确 => 耗时较长

4、组件传值 响应式理解问题

子组件改变 => 父组件的值 例如 name.value = props.name name.value = 'li.boq'

孙子组件传值?

5.文件结构化

一一对应 例如 router 对应 pages

严重的问题

1、子组件会改变父组件中的值

几天的检查,始终没有发现这个问题,焦虑了真的

我想过应该是引用类型 地址 被复制了,所以我尝试了把useSyncRef中改为

那天晚上 并没有解决问题 !疑惑 ?

两天后,嗯?什么 bug没有了!

还好 在另一个模块中还是存在这个bug 不然我就更无语了

在 hooks中 state = newState 这里应该是复制了state的地址,所以在图一 push的时候 还是props中的引用地址

所以 ,我们要改变给子组件变量的引用地址。

我翻看了 VueUse 中该hooks,应该是会对newState有一个操作的

2、defineModel 双向绑定

- parent
<son v-model:value = "value" />
const value = ref('')
- son
const value = defineModel<string>('value')

父组件的行为相当于如下

<son :value="value" @update:value="(val)=>value.value = val" />
const value = ref()

子组件的行为相当于

const props = defineProps({
   value:''
})
const emit = defineEmits('update:value')
watch(()=>props.value,
(val)=>{
emit('update:value',val)
},{
immediate:true
})

因为监听了props.value 的变化,所以在子组件发生变化时,会把最新的值更新给父组件,做到双向绑定

ref和reactive的实现

ref 的实现

const ref = (val) => {
 return new RefImpl(val)
}
class RefImpl{
	constructor(val){
	this._val = val
	}
	set value(){
	return this._val
	}
	set value(val){
	//进行render
	console.log(val)
	}
}
const name = ref('zhangs')
name.value = 'lisi'

reactive实现

const proxyMap = new weakMap()
const reactive = (target) =>{
if(proxyMap.has(target)){
return proxyMap.get(target)
}
 const proxy =  new Proxy(target, ()=>{
  get(target,key,recevier){
  const res = Reflect.get(target,key,receiver)
  // 收集 监听依赖
  return  isObject(res)?reactive(res):res
  }
  set(target,key,value,recevier){
  const res = Reflect.set(target,key,value,receiver)
  //  判断是否变化 来 触发 watch computed等
  return res 
  }
  })
   proxyMap.set(target, proxy);
  return proxy;
}

响应式数据

<script setup>
import { ref,reactive,watch } from 'vue'

const msg = ref('Hello World!')
const a = reactive({
  a:{a:1}
})
watch(()=>a.a,(v)=>console.log(v))
const update1 = () =>{
a.a.a =2
}
const update2 = () =>{
a.a = {a:3}
}
</script>

<template>
  <h1>{{ msg }}</h1>
  <input v-model="msg" />
  <button @click="update1">修改1</button>
  <button @click="update2">修改2</button>

  {{a.a.a}}
</template>

上面例子

我们监听了a.a 但是在 修改了 a.a={ a:3}时,再修改 a.a.a = 2 不会触发watch,也就是说这个a.a.a 不是一个响应式数据

因为 a.a = {a:3} 改变了 引用地址 让 a.a.a 不是一个响应式了

上一页自定义指令下一页权限管理(动态路由)

最后更新于5个月前

这有帮助吗?

image-20240710205542272
image-20240710205616082
image-20240715115037640
image-20240715115053777
image-20240715115108348
image-20240715115343315

[

Vue SFC Playground (vuejs.org)