antd中的setFieldsValue


title: antd中的setFieldsValue
date: 2022-08-20 21:09:08
tags: # 标签

  • antd
  • React

categories: # 分类

  • React
  • UI组件库

关于antd中的setFieldsValue

起因:

在做后台管理的用户列表页面时,想要制作一个点击编辑用户信息可以弹出一个拟态框,拟态框可以动态获取到用户的name和password值。同时,将获取到的值传递进input中。

image-20220820211735532

我原本的思路是先设置一个默认值,当点击编辑渲染拟态框组件的时候会触发useEffect组件挂载完毕的勾子,这时候就会触发setusername这个回调,将数据更改,从而将input中的值也更改。

当然,组件间传递数据是可以实现的

// 使用消息订阅与发布
import PubSub from 'pubsub-js'
...

// 点击编辑按钮弹出拟态框并将数据发给拟态框组件
const edit = (record)=>{
    // 使用消息订阅与发布将数据传送给拟态框
    PubSub.publish('inputValue',record)
    // 开启拟态框
    setVisible(true)
}

接收数据:

  useEffect(()=>{
    let token = PubSub.subscribe('inputValue',(_,data)=>{
      let {username,password} = data;
      // 此时拟态框获取到了对应点击那行用户的数据
    })
    return ()=>{
      PubSub.unsubscribe(token);// 清除消息订阅
    }
  },[]);

起初想使用useState改变状态,但是不彳亍😥,看了文档发现不支持,可以使用form.setFieldsValue({})

但是我实在不知道这里面的对象到底该怎么传!!

要知道,input有两个,该如何区分,如何赋值,官网也不详细。后来看了一个demo才发现,原来每个<From.Item>上都有一个name值,这就是区分不同input的关键!

...
<Form.Item 
    name="password" 
    label="密码"
    initialValue="admin" //这是默认值
    >
  <Input type="textarea"/>
</Form.Item>
...

解决方案:

...

  useEffect(()=>{
    let token = PubSub.subscribe('inputValue',(_,data)=>{

      let {username,password} = data;
      // 修改默认值
      form.setFieldsValue({
        username:username, // 对应第一个input
        password:password  // 对应第二个input
      })
        
    })
    return ()=>{
      PubSub.unsubscribe(token); //清除消息订阅
    }
  },[]);

...

此时不管点哪行用户的编辑,都可以实时更改input中的值:😍😍

image-20220820212921172

Blog地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值