我正在使用TypeScript开发一个基于React hook的函数式应用程序,我正在使用ant design中的modal。我正在通过modal提交表格。因此,将不止一次地调用该模式来填充表的不同行。
问题是,当模态在第二次、第三次或横向时间弹出时,它总是携带先前的值。
为了避免这种情况,我设置了模式EnableViewState="false"
,但它不起作用。我设置了destroyOnClose={true}
。但没成功在modal documentation中,当destroyOnClose不工作时,我们需要使用它。但在哪里定义它呢?因为,当我在模态形式中设置为<Form onSubmit={props.inputSubmit} preserve={false}
时,我得到一个错误,显示为Type '{ children: Element[]; onSubmit: any; preserve: boolean; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Form>......?
你用什么方法来保证每次模式重载时,它都是空的?我不想在输入的表单值字段中分配状态。是否有其他选项,例如destroyOnClose={true}?
这是我的模型
<Form onSubmit={props.inputSubmit}>
<Row>
<Col span={10}>
<Form.Item>
<Text strong={true}>Article name: </Text>
</Form.Item>
</Col>
<Col span={12}>
<Form.Item>
<Input
style={{ backgroundColor: '#e6f9ff' }}
name="articleName"
onChange={props.handleArticleModalInput}
/>
</Form.Item>
</Col>
</Row>
</Form>
这里是调用模态函数的地方
return (
<>
<ArticleTableModal
destroyOnClose={true}
isVisible={modalVisibilty}
inputSubmit={inputSubmit}
handleCancel={handleCancel}
filledData={fetchedData}
articleNumber={articleNumber}
handleArticleModalInput={handleArticleModalInput}
/>
<Table
pagination={false}
dataSource={articleDataSource}
columns={articleColumns}
scroll={{ y: 400 }}
bordered
/>
</>
)
任何帮助都非常感谢。
3条答案
按热度按时间2w3rbyxf1#
您需要在每次模态启动时为表单中的字段生成动态键。
这里有一个沙盒可以玩。如果不对键进行任何更改,模态将保留其中的值。如果更改键并启动模式,则该值将被清除。
Sandbox Link
nkoocmlb2#
在这里,我们将使用一个自定义钩子,它从其他地方(比如第三方UI库) Package ModalDialog组件,并返回一个setter和一个自包含component/null的元组。钩子使这变得更整洁,但您仍然可以使用类组件完成所有这些,代价是有点冗长。由于您标记了Typescript,这应该很简单,但您可能必须指定useState的使用是
useState<React.ReactChild>();
,以避免类型错误。jv4diomz3#
表单状态由useForm在Modal之外维护。
“destroyOnClose”是Modal中的API,因此它只处理与Modal相关的逻辑,而不是Form。
在antd 4.5版本以上,你可以简单地使用“保留” prop 。例如: