English 中文(简体)
2. 反应型jsonschema型式多栏支持
原标题:Multi column support for react-jsonschema-form

Is there a possibility to create multi column forms with https://github.com/rjsf-team/react-jsonschema-form

我正在使用材料。

问题回答

我最后使用该守则

import * as React from "react";
import Form from "@rjsf/material-ui";
import {FormProps, ObjectFieldTemplateProps} from "@rjsf/core";    
import Button from "@material-ui/core/Button/Button";
import styles from  ./LSForm.module.scss ;
import Grid from "@material-ui/core/Grid/Grid";

interface Props extends FormProps<any> {
   submitButtonText?: string
   showSuccessMessage?: boolean
   hide?: boolean
   columns?: number
   spacing?: 0 | 6 | 4 | 3 | 1 | 2 | 5 | 7 | 8 | 9 | 10 | undefined
}

const LSForm: React.FC<Props> = (props) => {
const getColumns = () => {
    if (props.columns === 1) {
        return 12;
    }
    if (props.columns === 2) {
        return 6;
    }
    if (props.columns === 3) {
        return 4;
    }
    if (props.columns === 4) {
        return 3;
    }
    // Default one colum
    return 12;
};

const getSpacing = (): 0 | 6 | 4 | 3 | 1 | 2 | 5 | 7 | 8 | 9 | 10 | undefined => {
    let spacing: 0 | 6 | 4 | 3 | 1 | 2 | 5 | 7 | 8 | 9 | 10 | undefined = 0;
    if (props.spacing != null) {
        spacing = props.spacing;
    }
    return spacing;
};

const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => {
    return (
        <div>
            <Grid container spacing={getSpacing()}>
                {props.title}
                {props.description}
                {props.properties.map(element => {
                    return <Grid item xs={getColumns()}><div         className="property-wrapper">{element.content}</div></Grid>
                })}
            </Grid>
        </div>
    );
};

return (
    <>
        { !props.hide &&
            <Form {......props} ObjectFieldTemplate={ObjectFieldTemplate}>
                { props.children &&
                <div className={styles.actionBar}>
                    {props.children}
                </div>
                }
                { !props.children &&
                <div className={styles.actionBar}>
                    <Button type={"submit"} disabled={props.disabled} variant="contained" color="primary">{ props.submitButtonText ? props.submitButtonText : "Speichern"}</Button>
                </div>
                }
            </Form>
        }

    </>
);
};

export default LSForm;

User it as follow: ......

return (
    <>

            <LSForm schema={schema}
                    hide={hideForm}
                    spacing={3}
                    columns={3}
                    uiSchema={uiSchema}
                    onSubmit={(data) => onSubmit(data)}>
                <Button type={"submit"} variant="contained" color="primary">Login</Button>
                &nbsp;<Button variant="contained" color="primary">Forgot Password</Button>
            </LSForm>
    </>
);

......

我找到的解决办法不是我喜欢的:

   const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => {
    return (
        <div>
            {props.title}
            {props.description}
            {props.properties.map(element => {
                return <div className="property-wrapper">{element.content}</div>
            })}
        </div>
    );
}
 <Form ObjectFieldTemplate={ObjectFieldTemplate}>

煽动好几小时的游乐,找到另一种解决办法:

const uiSchema = {
    "email": {
        "ui:widget": "email",
         ui:column :  xs6 
    },
    "password": {
        "ui:widget": "password",
         ui:column :  xs6 
    }
};

这里的问题:coumn:xs6只与boot锁主题合作。 原因一是使用材料,这种做法不能使用,或错过了。

更多或更好的解决办法,即真正地评估

对5.x反应型jsonschema-form而言,改变一栏的最好方法是:

反应/jsonschema-form/ Packages/mui/src/ObjectTemplate/Object FieldTemplate.tsx

xs={12} by xs={6}

<Grid item={true} xs={3} key={index} style={{ marginBottom:  10px  }}>
   {element.content}
</Grid>

您能够提供你的人数。





相关问题
How to use one react app into another react app?

I have two react apps, parent app and child app. and child app have an hash router. I have build the child app using npm run build, It creates build folder. That build folder moved into inside the ...

how to get selected value in Ant Design

I want to print the selected value, and below is my option list: const vesselName = [ { value: 0 , label: ALBIDDA , }, { value: 1 , label: ALRUMEILA , }, { value: 2 ,...

How to add a <br> tag in reactjs between two strings?

I am using react. I want to add a line break <br> between strings No results and Please try another search term. . I have tried No results.<br>Please try another search term. but ...

热门标签