react表单有多个下拉调用接口,有些下拉数据没有渲染

  • 1.出现不渲染的场景
    比如有2个下拉分别是name1,name2,新建一个变量
const [routeData, setRouteData] = useState({name1:[]},name2:[])
然后:
useEffect(() => {  
 //调用接口获取name1的数据,然后set进去name1
 serve.getName1List().then(res=>{
 	routeData.name1 = res
 	setRouteData(routeData)
 })
 //调用接口获取name2的数据,然后set进去name2 
  serve.getName1List().then(res=>{
 	routeData.name1 = res
 	setRouteData(routeData)
 })
 }, [visible])
 
 注意!上面代码有2个坑

直接改routeData的属性再set是不生效的,需要深拷贝一份数据,然后修改新数据,再整体set才生效。
分开set其中的属性也是有问题的,很可能routeData其中的一个属性没有set进去
- 修改:
- const [routeData, setRouteData] = useState({name1:[]},name2:[])
  useEffect(() => {
    setRouteData({})
    if (form && !visible) {
      form.resetFields()
    }
    if (visible) {
      // 自执行函数
      (async function () {
        form.resetFields()
   		let name1 = await getName1Fn()
        let name2 = await getName2Fn()
        // 深拷贝后再对拷贝数据进行整体赋值
        let data = JSON.parse(JSON.stringify(routeData))
        data.name1= name1
        data.name2= name2
        setRouteData(data)
      }());
    }
  }, [visible])
  
  const getName1Fn = async () => {
    return new Promise((resolve, reject) => {
      basketPageList().then((res) => {
        if (res?.code === 0) {
          resolve(res.data)
        }
      })
    })
  }
  
  const getName2Fn = async () => {
    return new Promise((resolve, reject) => {
      getPageList().then((res) => {
        if (res?.code === 0) {
          resolve(res.data)
        }
      })
    })
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值