zarm
zarm copied to clipboard
Modal 模态框内使用 Input 组件,onChange 触发之后,Input 的 value 值不生效。
Modal.confirm({ title: '添加备注', content: <Input autoHeight showLength maxLength={50} type="text" rows={3} value={remark} placeholder="请输入备注信息" onChange={(val) => setRemark(val)} /> })
的确有问题,感谢反馈
@Nick930826
由于 Modal.confirm 的背后实现是通过动态 appendChild + ReactDOM.render 去实现的,所以 Modal.confirm 创建出来的组件其实已经脱离了当前 Class 组件的上下文,并不在当前 Class 组件的 render 范围内,即 Modal.confirm 组件不会因为调用 setRemark 而重新渲染。可以看到 Ant.Design 也是这样:https://codesandbox.io/s/guojihua-antd4153-forked-slgl0?file=/index.js
解决方案有两种:
- Modal 采用 JSX 的写法,写在 render 方法里,这样 Class 组件内部的 setRemark 就可以引发 Modal 的渲染。
- Input 组件改为非受控,直接用 this.value 的方式去取值。
Modal.confirm({
title: '添加备注',
content: <Input
autoHeight
showLength
maxLength={50}
type="text"
rows={3}
placeholder="请输入备注信息"
onChange={(value) => {
this.value = value; // 直接取this.value去使用
}}
/>
})
@edison-hm 考虑一下开放 Confirm 的 JSX 的写法,这样比用 Modal 去重新构造使用上方便一点。