Vue中computed属性joinedRooms有值但setRoom调用未生效语法错误排查
问题根因
你代码的核心语法错误是setRoom方法的定义位置错误,没有成为methods的直接成员,导致this.setRoom不存在,调用时报错中断执行,所以对应逻辑无法运行:
- 你错误地把
setRoom方法写在了connect方法的函数体内,methods下的所有方法必须是平级的直接属性,嵌套在其他方法内的函数不会挂载到组件实例this上 - 同时
connect方法定义后没有写函数体内容也没有闭合括号,本身就是语法错误,也会导致后续方法解析异常
修复后的代码示例
methods: { // connect方法单独定义,补全闭合结构 connect () { // 此处补充connect方法的原有逻辑 }, // setRoom调整为methods的直接属性,和其他方法平级 setRoom(room) { this.$store.dispatch(RoomTypes.CURRENT_ROOM, room); this.currentRoom = room; this.$emit('onSelectRoom', room); }, leaveRoom(room) { this.room = this.currentRoom; this.$store.dispatch(RoomTypes.LEAVE_ROOM, room.id); Echo.leave("chat." + this.currentRoom.id); this.setRoom(this.joinedRooms[0]); } }, created() { this.$store.dispatch(RoomTypes.GET_ROOMS); }, computed: { ...mapGetters({ theme: "getTheme" }), joinedRooms() { return this.$store.state.rooms.joinedRooms; } }
额外排查提示
如果修复后仍有异常可以按以下顺序确认:
- 打开浏览器控制台查看是否有
this.setRoom is not a function类的报错,可直接定位方法不存在的问题 - 确认
Echo.leave方法是同步执行还是异步执行,如果是异步且未加await,不会阻塞后续代码执行,不属于当前问题的影响范围
内容的提问来源于stack exchange,提问作者ArcticMediaRyan
相关产品推荐
相关产品推荐

