如果我在 React 中单击 RadioButtonGroupInput 标签,如何隐藏其他标签?

How to hide other tag if i click a RadioButtonGroupInput tag in React?

我想在 React 中单击 RadioButton 时隐藏其他标签.. 单击 RadioButtonGroupInput 时,我想隐藏 ReferenceInput 标签 如果你知道怎么做..请评论..

const UserEdit = ({ classes, ...props }) => (
    <Edit {...props}>
        <SimpleForm>
            <TextInput source="username" validate={required()}/>
            <TextInput source="email" validate={[required(),email()]}/>
            <TextInput source="phoneNumber" validate={[required(),minLength(10),number()]}/>
            <RadioButtonGroupInput label="Type"
                                   source="userType"
                                   choices={types}
                                   optionText="id"
                                   validate={required()}
                                   onChange={(event,id) => (id === "COMPANY") ? console.log(id) : console.log(event)}/>
            <ReferenceInput label="Company" source="company.id" reference="companies">
                <SelectInput optionText="name" />
            </ReferenceInput>
        </SimpleForm>
    </Edit>
);

您可以集成 useState() 挂钩以与 RadioButtonGroupInput 配合使用。它让我们定义一个 checked 值和一个专门用于更新 checkedsetChecked 函数。

onChange() event-listener 被触发时,我们将切换 checked 值。然后我们使用checked条件渲染ReferenceInput

import React, { useState } from "react

const UserEdit = ({ classes, ...props }) => (

    //creates a state-value and a state-updater function. Set default as false.
    const [ checked, setChecked ] = useState(false)

    <Edit {...props}>
        <SimpleForm>
            <TextInput source="username" validate={required()}/>
            <TextInput source="email" validate={[required(),email()]}/>
            <TextInput source="phoneNumber" validate={[required(),minLength(10),number()]}/>
            <RadioButtonGroupInput 
                 label="Type"
                 source="userType"
                 choices={types}
                 optionText="id"
                 validate={required()}
                 onChange={() => setChecked(!checked)}/> //set to opposite of current-value

            //if not checked, then we will display ReferenceInput, if checked, hide.
            { !checked && (
                <ReferenceInput label="Company" source="company.id" reference="companies">
                    <SelectInput optionText="name" />
                </ReferenceInput>

            )}
        </SimpleForm>
    </Edit>
);

终于,我做到了。请参阅以下来源。

const UserCreate = ({ classes, ...props }) => {
    const types = [
        {id:'INDIVIDUAL'},
        {id:'COMPANY'}
    ];

    const [checked,setChecked] = useState(true);

    const onClickRadioBtn = (event,id) => {
        (id === "COMPANY") ? setChecked(false) : setChecked(true)
    }

    return(
        <Create {...props}>
            <SimpleForm>
                <TextInput source="username" validate={required()}/>
                <TextInput source="password" validate={required()}/>
                <TextInput source="email" validate={[required(),email()]}/>
                <TextInput source="phoneNumber" validate={[required(),minLength(10),number()]}/>
                <RadioButtonGroupInput label="Type"
                                       source="userType"
                                       choices={types}
                                       optionText="id"
                                       validate={required()}
                                       onChange={onClickRadioBtn}/>
                { !checked && (
                    <ReferenceInput label="Company" source="company.id" reference="companies">
                        <SelectInput optionText="name" />
                    </ReferenceInput>
                )}
            </SimpleForm>
        </Create>
    );
};