antd中Select的defaultValue参数问题

this.state={
    setxzvalue:''
}
 componentWillMount=()=>{
        fetch('/api/user/loadDetail',{
            method:'GET',
            headers:{
                'Content-Type': 'application/json'
            },
            credentials: 'include'
        })
        .then((res)=>res.json())
        .then((res)=>{
            if(res.num == 1){
                this.setState({
                    setradiovalue:res.sex,
                    setxzvalue:res.xz,
                    disabled:true
                })
            }
            console.log(this.state.setxzvalue)
        })
    }
   render(){
    <Select defaultValue={this.state.setxzvalue}></Select>
}

代码是这样的,情况是页面自动加载传来的res,然后去改变setxzvalue,从而动态改变select的默认显示,但是这样写没有效果。。不知道问题出在哪里了
按道理来说setState后render会重新渲染啊,但是defaultValue的值还是空值,在页面上看不到传来的res.xz,求大神分析一下原因,万分感谢!

阅读 16.7k
2 个回答

initialValuedefaultValue 一样,只有首次生效。你可以在获取到数据后用
this.props.form.setFieldValue设置对应的值, 或者从一开始就设置 valuethis.state. setxzvalue

fetch是异步的,无论是放到componentWillMount还是componentDidMount中都是没有差别的,react在结果返回之前就完成组件渲染了。
因此在render方法里面打印一下this.state.setxzvalue的值,可以发现第一次为空字符串,第二次为实际的setxzvalue值。而defaultValue在第一次已经被赋值了,即使后面传入了正确的值,也绝不动摇,这是default家族生而俱来的优秀品质,值得尊敬。

解决方案就是未传入正确的setxzvalue值之前不渲染组件,把defaultValue的第一次留给正确的值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏