Naive UI 的 Cascader 为什么选不了值?
我用 Naive UI 的 Cascader 组件,数据是动态从接口拉的,但点开下拉选项后,点击任何一项都没反应,值也没变。控制台也没报错。
我试过把 options 写死,那样是可以选的,但一换成异步数据就不行了。是不是响应式的问题?我的 options 是用 ref 包着的:
const options = ref([])
onMounted(async () => {
const res = await fetchOptions()
options.value = res // 格式和文档示例一样,有 label/value/children
})
模板里就是最简单的用法:<n-cascader v-model:value="value" :options="options" />,但就是选不中……
value的初始值类型不对。你的
value是怎么定义的?是不是写成了const value = ref(null)或者const value = ref('')?Naive UI 的 Cascader 要求
value必须是数组类型,即使没有默认值也要初始化成空数组:因为 Cascader 选中的值是路径数组,比如选中"广东省-广州市",value 会变成
['guangdong', 'guangzhou']。如果初始值不是数组,组件内部做 push 或者遍历操作的时候就会出问题,但不会报错,就是点不动。另外再检查一下你的异步数据格式,确保每个节点都有
label和value字段,而且value不能重复。如果你的接口返回的字段名不一样,比如叫name和id,那需要手动映射一下,或者用label-field和value-field属性指定:我当时就是卡在初始值类型上,写死数据的时候顺手写对了,异步加载的时候反而写错了,排查了半天。你看看是不是这个问题。