编辑:这是一个简单的小提琴,显示正在发生的事情。点击"更改"更改状态但不更新(重新呈现)表单:
https://jsfiddle.net/mbaranski/pt20o4w7/
我有以下表格:
const FormComponent = ({create, token, cas, createUISchema}) => {
console.log("Schema", cas)
return (
<Grid>
<Row>
<Col sm={12} md={4}>
<Form schema={cas}
uiSchema={createAuditUISchema}
onSubmit={(data) => {
create(token, data)
}}
/>
</Col>
</Row>
</Grid>
)
}
我有一个这样的架构(最初):
export const formSchema = {
"title": "Creat Form",
"description": "Create something.",
"type": "object",
"required": [
"itemId",
],
"properties": {
"itemId": {
"type": "string",
"title": "Item",
"enum": ["1"],
"enumNames": ["A"]
},
...
现在,表单呈现正常,我看到一个select
元素,其中包含一个值(console.log
显示正确的数据)
当我有更新cas
的异步更改时,我的问题就出现了。 (我还看到console.log
重新启动了更新的enum
和enumNames
值,因此我知道FormComponent正在重新渲染。表单不会重新呈现并显示新值。
我使用的是redux,但我们只是在这里重新渲染一个组件。我也在很多地方使用这个lib,这是我唯一无法解决的问题。
Form
无法处理接收新属性吗?我需要做些什么才能让它更新?我在github页面上没有看到任何关于此的文档。
以下是mapStateToProps
方法:
const mapStateToProps = (state) => {
const cas = Object.assign({}, createFormSchema, {})
state.auth.dynamicItems.forEach((item) => {
cas.properties.itemId.enumNames.push(item.name)
cas.properties.itemId.enum.push(item.id)
}
)
const stp = {
token: state.auth.token,
cas,
createAuditUISchema,
}
return stp
}