javascript - 如何在其数据(和状态)完好无损的情况下重新渲染组件(Vue)?
问题描述
以下是我的代码的结构:父组件通过 v-if 指令在子组件中混洗,其中一个子组件使用状态来定义其数据。一切正常,除非我在子组件之间切换。当我回来时,由于状态已变为空,因此无法显示任何数据。
父组件:
<template>
<div>
<Welcome v-if="view==0" />
<Courses v-if="view==1" /> //the component that I'm working on
<Platforms v-if="view==2" />
</div>
</template>
课程组成:
<template>
<div>Content</div>
</template>
<script>
export default {
name: 'Courses',
computed: {
...mapState([
'courses'
])
},
data () {
return {
courseList: [],
len: Number,
}
},
created () {
console.log("state.courses:")
console.log(this.courses)
this.courseList = this.courses
this.len = this.courses.length
},
}
</script>
假设“视图”的默认值为 1,当我加载页面时,将显示“课程”组件(包含数据)。如果我单击一个按钮将“view”的值更改为 0,则会显示“Welcome”组件。但是,当我尝试返回“课程”组件时,课程组件已呈现,但缺少所有数据。
经过检查(通过控制台日志记录),我发现最初呈现“课程”组件时,状态被正确映射并且我可以使用它,但是如果我将“视图”更改为另一个值以呈现另一个组件然后更改它恢复到原始值,“课程”组件仍然呈现,但状态变为未定义或为空。
编辑:澄清。
解决方案
设置courseList
为组件名称并使用<component>
并设置一些枚举
例如。
<template>
<component :is="this.viewState" />
</template>
<script>
export default {
// your stuff
data() {
return {
viewState: 'Welcome',
}
},
methods: {
getComponent(stateNum) {
const States = { '1': 'Welcome', '2': 'Courses', '3': 'Platforms' }
Object.freeze(States)
return States[stateNum]
}
},
created() {
// do your stuff here
const view = someTask() // someTask because I don't get it from where you're getting data
this.viewState = this.getComponent(view)
}
}
</script>
我实际上并没有正确理解,但在这里我给出了一些解决您问题的想法。
推荐阅读
- spring - 如何在 SpringMVC 中自定义 UsernamePasswordAuthenticationFilter
- firebase - 如何检查另一个文档中的字段是否重复(Firebase颤动)
- python - 尝试对 N 维数组使用回归时出错
- c++ - 如何通过运行时类型反射 (RTTR) 反映这种 JSON 数组?
- java - 如何使用 Java 将错误消息移动到 Azure 死信队列(主题 - 订阅)?
- javascript - NULL 数据对象显示在我的 php 脚本中
- c - 在 C 中使用 libpng 读写 PNG 文件
- python - 检查字符串是否包含在单元格值中
- javascript - 事件循环是否轮询事件完成或内核/操作系统通知回来?
- rx-java - RxJava2 中的函数响应式运算符,从先前的状态和额外的输入产生新的状态