Как скрыть другой тег, если я щелкну тег RadioButtonGroupInput в React? - PullRequest
2 голосов
/ 12 июня 2019

Я хочу скрыть другой тег, когда я нажимаю RadioButton в React .. Когда щелкает 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>
);

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

Вы можете интегрировать крючок useState() для координации с RadioButtonGroupInput.Это позволяет нам определить значение checked и функцию setChecked, используемые специально для обновления checked.

Когда срабатывает прослушиватель событий onChange(), мы переключим значение 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>
);
1 голос
/ 13 июня 2019

Наконец-то я это сделал. см. следующие источники.

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>
    );
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...