当架构发生更改时,React react-jsonschema-form不会重新呈现

时间:2018-03-07 21:43:18

标签: javascript reactjs

编辑:这是一个简单的小提琴,显示正在发生的事情。点击"更改"更改状态但不更新(重新呈现)表单:

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重新启动了更新的enumenumNames值,因此我知道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
}

0 个答案:

没有答案