请教antd中,Select组件的defaultValue,如何在异步请求后有效?

#1

如下图所示,defaultValue设置为0之后,应该显示value对应的那一项,而不是直接显示设置的值。
原因:下拉列表,是一个异步请求,而设置defaultValue在请求之前已经完成。
请问该怎么办呢?

#2

defaultValue=“0"改成defaultValue={this.state.categories[0].type?this.state.categories[0].type.tostring():”"}

#3

改了之后,还是不行,一直是“”。

#4

总感觉是在异步请求前设置有效,当获取到下拉列表数据时,其设置已经生效了。
state刷新时,defaultValue并未重新设置

#5

你再设置一个新的state参数,并且设置defaultValue为你新设置的参数,当this.state.categories异步获取到的时候,也更新那个state值,这样defaultValue里面的内容才会刷新

#6

异步数据确实获取到了,但还是显示的默认空值。


#7

你这应该是用 value, 而不是 defaultValue, defaultValue 是组件初始化默认用的数据, 而你异步请求获取的数据需要用 value 属性

1 Like
#8

你在map的时候,其实defaultvalue已经取到值了,但是因为下拉内容没渲染完成,所以没法实现默认选中第一项,this.state.categories内直接放map好的数组

#9

如果想实现非受控组件(用defaultValue),两个办法,第一个服务端没有返回数据的时候,不render Select,render一个占位的placeholder。另一个办法,给Select加一个key,值为defaultValue。

2 Likes
#10

这种问题好像是defaultValue的值和option里的value的值的类型不同引起的,

#11

都是string类型的啊

#12

dalao,加key真的有用,帮了大忙非常感谢

1 Like
#13

加key解决了,感谢大佬!

#14

加key可以用 谢谢大佬