reactjs React js使用Material UI复选框的状态显示/隐藏特定元素

t40tm48m  于 2023-06-05  发布在  React
关注(0)|答案(1)|浏览(188)

你好,我试图显示和隐藏特定的元素与复选框材料和现在发生的事情是,当一个复选框被选中,所有隐藏的div显示出来。
你可以在这里看到问题:https://stackblitz.com/edit/react-1ecdqb?file=demo.tsx
编辑:我知道我需要更多的变量在状态,但我问是否有一种方法来做到这一点,没有状态的每个复选框,因为会有10个以上的复选框

const UninstallView = () => {
        const [isChecked, setIsChecked] = useState(false);

        const handleChange = event => {
            if (event.target.checked) {
                setIsChecked(true);
                }
            else {
                setIsChecked(false);
                }
            }
    return (
    <div>
 <FormGroup>
    <FormControlLabel  control={<Checkbox  onChange={handleChange}   />} label="simple isn't what I expected" />
       {isChecked ? <TextField
                    id="filled-multiline-static"
                    label="What did you expect from simple?"
                    multiline
                    rows={4}
                    defaultValue=""
                    variant="filled"
                    />
                    : '' }
        </FormGroup>
        <FormGroup>
           <FormControlLabel  control={<Checkbox  onChange={handleChange}  />} label="simple isn't working correctly" />
               {isChecked ? 
                   <div>
                        <h1>hello</h1>
                    </div>
                       : '' }
                </FormGroup>
    </div>
   );
hc8w905p

hc8w905p1#

您在2个复选框中共享1个状态。您应该有一个单独的状态来保存每个复选框的状态。
这段代码可以帮助:

const UninstallView = () => {
    const [isFirstChecked, setIsFirstChecked] = useState(false);
    const [isSecondChecked, setIsSecondChecked] = useState(false);

    return (<div>
        <FormGroup>
            <FormControlLabel
                control={<Checkbox onChange={() => setIsFirstChecked(!isFirstChecked)}/>}
                label="simple isn't what I expected"/>
            {isFirstChecked ? <TextField
                id="filled-multiline-static"
                label="What did you expect from simple?"
                multiline
                rows={4}
                defaultValue=""
                variant="filled"
            /> : ''}
        </FormGroup>
        <FormGroup>
            <FormControlLabel
                control={<Checkbox onChange={() => setIsSecondChecked(!isSecondChecked)}/>}
                label="simple isn't working correctly"/>
            {isSecondChecked ? <div>
                <h1>hello</h1>
            </div> : ''}
        </FormGroup>
    </div>);
}

Sandbox example

相关问题