Cascader选项数据更新后组件不重新渲染怎么办?
在用Ant Design的Cascader组件时,当我通过接口动态获取到新的选项数据后,发现组件没有重新渲染,手动修改了selectedOptions也无效,这是怎么回事?
我尝试把新数据直接赋值给options状态,但控制台显示数据更新了组件却不变化。数据格式是这样的:
[
{ value: 'zhejiang', label: 'Zhejiang', children: [...] },
{ value: 'jiangsu', label: 'Jiangsu' }
]
是不是需要特别处理children结构?
你在接口拿到新数据后,别直接push或者修改原数组,得保证options指向一个全新的数组。最简单的方式就是解构一下:
或者用concat也行:
JS里面对象和数组都是引用类型,直接赋值只是拷贝了指针,React那边根本不知道你内容变了。一定要生成新引用,state才算真正变化,才能触发重新渲染。
另外确认下你的children结构对不对,子节点也要有value、label,而且不能是null,空数组可以,但别留undefined或者乱写的字段。如果某一层children是null或者格式不对,Cascader也可能卡住不更新。
还有个小坑:如果你同时改了options和selectedValue,记得两个都得给新引用,不然也可能出问题。清一下selectedValue再设回去,能避免联动异常。
如果还不行,检查一下children结构是不是完整。