V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ooo4  ›  全部回复第 1 页 / 共 5 页
回复总数  86
1  2  3  4  5  
12 天前
回复了 ooo4 创建的主题 成都 感觉房子卖不出去了。
@kaylabrady07736 什么家庭?
16 天前
回复了 ooo4 创建的主题 成都 感觉房子卖不出去了。
@qwertyzzz 这个应该不行
16 天前
回复了 nightnotlate 创建的主题 生活 楼上噪音续
现在卖出去没有
17 天前
回复了 ooo4 创建的主题 成都 感觉房子卖不出去了。
看来只有将就住了。
27 天前
回复了 imba97 创建的主题 程序员 关于今天给前端返回数据的结构的争论
以前我也觉得后端返回的数据结构应该保持一致,直到后面被安排到其他项目组,里面的后端都是公司呆了 10 多年那种,接口写的十分的丑陋,什么拼音啊,额外字段用什么 xxx1 ,xxxx2 ,xxxx3 前端根本用不上,虽然代码很恶心,但管他的,说不定明年你就跑路了
@zhengfan2016 因为 setup 函数不是副作用,所以不会重新执行,那么 toRefs 的数据在没有其他副作用的情况下,是不会改变的
如果保持你的代码,那么只能改渲染函数了,让他尽量的像 react
```
// Comp.js 不是 sfc
import { watchEffect, onMounted, toRefs, ref } from 'vue';

export default {
setup() {
let data = ref()
onMounted(() => {
setTimeout(() => {
data.value = { code: 0, data: [666, 777, 888] }
}, 1000)
})

return () => {
// 渲染函数 这是副作用,当响应式数据改变了,就会重新执行
const { data: list } = toRefs(data.value) || {}
watchEffect(() => {
console.log('list', list?.value)
})
// jsx
return 1
}
}
}
```
toRefs 的参数必须是一个对象才行,而且必须还要存在属性,因为它要把对应的属性值变成 ref 。
而现在使用的是 ref 包裹数据,那么也应该是`const {data:list} = toRefs(data.value)`才行,让 list 变成了响应式数据,
但是是通过`data.value = { code: 0, data: [666, 777, 888] }`改变数据,也只是改变了 data(ref),list 并没有改变,所以 list 还是以前的数据,如果这样`Object.assign(data.value, { code: 0, data: [666, 777, 888] })`修改数据应该可以

看错了 [如果对 ref 包装的 obj 进行解构]
```
import { reactive, watchEffect, onMounted, toRefs, ref } from 'vue';
const data = ref({ code: null, data: [] })
onMounted(() => {
setTimeout(() => {
Object.assign(data.value, { code: 0, data: [666, 777, 888] })
}, 1000)
})

debugger
const { data: list } = toRefs(data.value)
watchEffect(() => {
console.log('list', list.value)
})
```
@ooo4
不需要这么麻烦
```
import { reactive, watchEffect, onMounted, toRefs } from 'vue';
const data = reactive({ code: null, data: [] })
onMounted(() => {
setTimeout(() => {
Object.assign(data, { code: 0, data: [666, 777, 888] })
}, 1000)
})


const { data: list } = toRefs(data)
watchEffect(() => {
console.log('list', list.value.length)
})
```
试试这个

const data = reactive({ code: null, data: [] })
onMounted(() => {
setTimeout(() => {
Object.assign(data, { code: 0, data: [666, 777, 888] })
}, 1000)
})

function useFoo(state) {
const res = {}
watchEffect(() => {
for (let key in state) {
res[key] = toRef(state, key)
}
})
return res
}

const { data: list } = useFoo(data)

watchEffect(() => {
console.log('data', data)
console.log('list', list)
})
@zhengfan2016 因为我在调试 react 源码,不想通过合成事件去触发,徒增额外调试
@shintendo 从 chrome 的 debugger 工具看,这个 props 确实是来源于闭包,thanks!!
@maclanelf134 那不至于,主要是嫌弃公司的垃圾项目,不想维护
@Liam1997 项目没写过,但 react 的官网看过几次,可以用一个很简单的 demo 打断点一步一步的调试,再看看那些大佬总结的笔记,调试过十几次自然就看的进去了,不过也就简单了解下核心流程
@tog vue 技术栈,但公司的 vue2 老项目太恶心了基本改不动,为什么突然想换了,因为想涨工资了
@llsquaer 我也是这样,一直按着 shift 很累
因为 react 很火,nextjs 也很火
crud 启动
178 天前
回复了 liuchengfeng1 创建的主题 git 各位大佬你们团队开发 git 是如何管理的?
@gorvey 这个肯定要统一 eslint 或者 prettier 的配置文件
198 天前
回复了 netabare 创建的主题 程序员 发现自己的 commit 标题和内容越来越长了
@tyrantZhao 不是自己项目,真不想弄那么细
1  2  3  4  5  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1921 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 27ms · UTC 10:40 · PVG 18:40 · LAX 02:40 · JFK 05:40
Developed with CodeLauncher
♥ Do have faith in what you're doing.