关于antd中的setFieldsValue
起因:
在做后台管理的用户列表页面时,想要制作一个点击编辑用户信息可以弹出一个拟态框,拟态框可以动态获取到用户的name和password值。同时,将获取到的值传递进input中。
我原本的思路是先设置一个默认值,当点击编辑渲染拟态框组件的时候会触发useEffect
组件挂载完毕的勾子,这时候就会触发setusername这个回调,将数据更改,从而将input中的值也更改。
当然,组件间传递数据是可以实现的
1 2 3 4 5 6 7 8 9 10 11
| import PubSub from 'pubsub-js' ...
const edit = (record)=>{ PubSub.publish('inputValue',record) setVisible(true) }
|
接收数据:
1 2 3 4 5 6 7 8 9
| useEffect(()=>{ let token = PubSub.subscribe('inputValue',(_,data)=>{ let {username,password} = data; }) return ()=>{ PubSub.unsubscribe(token); } },[]);
|
起初想使用useState
改变状态,但是不彳亍😥,看了文档发现不支持,可以使用form.setFieldsValue({})
x
Document
html
要知道,input有两个,该如何区分,如何赋值,官网也不详细。后来看了一个demo才发现,原来每个<From.Item>
上都有一个name
值,这就是区分不同input的关键!
1 2 3 4 5 6 7 8 9
| ... <Form.Item name="password" label="密码" initialValue="admin" > <Input type="textarea"/> </Form.Item> ...
|
解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ...
useEffect(()=>{ let token = PubSub.subscribe('inputValue',(_,data)=>{
let {username,password} = data; form.setFieldsValue({ username:username, password:password }) }) return ()=>{ PubSub.unsubscribe(token); } },[]);
...
|
此时不管点哪行用户的编辑,都可以实时更改input中的值:😍😍
Blog地址