首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >名称属性的单选按钮全局状态

名称属性的单选按钮全局状态
EN

Stack Overflow用户
提问于 2020-05-28 18:36:58
回答 1查看 100关注 0票数 2

我需要能够有辐射按钮或复选框显示/隐藏内容,如果它被选中。将有更多的单选按钮和复选框以相同的形式显示内容,因此为了区别它们,可以基于name属性。

到目前为止,我可以在检查单选按钮时显示隐藏字段,但我希望其中一个取消另一个,但前提是它具有相同的name属性(其他东西也可以工作)。

有反应天才能弄明白吗?我将永远欠你的债

代码语言:javascript
运行
复制
class PartnerRoute extends Component {
    constructor(props) {
        super(props)
        this.state = {
            showOneTimeFee: '',
            showSubscription: ''
        };
    }

    toggleOneTimeFee = () => {
        const currentState = this.state.showOneTimeFee;
        this.setState({
            showOneTimeFee: !currentState
        })
    }
    toggleSubscription = () => {
        const currentState = this.state.showSubscription;
        this.setState({
            showSubscription: !currentState
        })
    }

    render() {
        return (
            <div className="partner-route">
                <ContentContainer>                    
                    <div className="form--create-event">
                        <form>
                            <h3>Event information</h3>
                            <GridContainer columnCount="one">
                                <CustomInput type="text" placeholder="Event name" />                              
                            </GridContainer>

                            <GridContainer columnCount="one">
                                <CustomTextarea type="text" placeholder="Event description" />  
                            </GridContainer>   

                            <h3>Event date</h3>
                            <GridContainer columnCount="three">
                                <CustomInput type="text" placeholder="Day" />
                                <CustomInput type="text" placeholder="Month" /> 
                                <CustomInput type="text" placeholder="Year" />
                            </GridContainer> 

                            <h3>Payment</h3>
                            <GridContainer columnCount="one">
                                <CustomRadio 
                                    type="radio" 
                                    name="payment" 
                                    id="rb1" 
                                    value="1"
                                    label="Free, no payment needed" 
                                />
                                <CustomRadio 
                                    type="radio" 
                                    name="payment" 
                                    id="rb2" 
                                    value="2"
                                    label="1 time fee"
                                    onChange={this.toggleOneTimeFee} 
                                />
                                {this.state.showOneTimeFee &&
                                    <div className="hidden-field">
                                        <CustomInput type="text" placeholder="Price" />
                                    </div>
                                }

                                <CustomRadio 
                                    type="radio" 
                                    name="payment" 
                                    id="rb3" 
                                    value="3"
                                    label="Subscription"
                                    onChange={this.toggleSubscription}
                                />
                                {this.state.showSubscription &&
                                    <div className="hidden-field">
                                        <CustomInput type="text" placeholder="Price" />
                                    </div>
                                }
                            </GridContainer> 
                        </form>   
                    </div>
                </ContentContainer>

            </div>
        )
    }
}

export default PartnerRoute
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-29 10:40:00

请检查这个示例,我在其中使用了setStateprevState,这一点很重要,同时我在所有三个收音机中都使用了changeHandler。此外,为了在我这边运行这段代码,我用ex CustomInput的通用输入将所有自定义输入更改为input。请把这个转到你这边。

代码语言:javascript
运行
复制
import React, {Component} from "react";

export default class PartnerRoute extends Component {
    constructor(props) {
        super(props);
        this.state = {
            showOneTimeFee: false,
            showSubscription: false
        };
    }
    handleChange = (event) => {
        if (event.target.value == 2) // One Time Fee
            this.setState(prevState => {
                return {
                    showOneTimeFee: !prevState.showOneTimeFee,
                    showSubscription: false
                };
            });
        else if (event.target.value == 3) // Subscription
            this.setState(prevState => {
                return {
                    showOneTimeFee: false,
                    showSubscription: !prevState.showSubscription
                };
            });
        else // Free, no payment needed
            this.setState({
                showOneTimeFee: false,
                showSubscription: false
            });
    };

    render() {
        return (
            <div className="partner-route">
                <div>
                    <div className="form--create-event">
                        <form>
                            <h3>Event information</h3>
                            <div>
                                <input type="text" placeholder="Event name"/>
                            </div>
                            <div>
                                <input type="text" multiline="true" placeholder="Event description"/>
                            </div>
                            <h3>Event date</h3>
                            <div>
                                <input type="text" placeholder="Day"/>
                                <input type="text" placeholder="Month"/>
                                <input type="text" placeholder="Year"/>
                            </div>
                            <h3>Payment</h3>
                            <div>
                                <input type="radio" name="payment" id="rb1" value="1" label="Free, no payment needed"
                                       onChange={this.handleChange}/>
                                <label htmlFor="rb1">Free, no payment needed</label><br/>
                                <input type="radio" name="payment" id="rb2" value="2" label="1 time fee"
                                       onChange={this.handleChange}/>
                                <label htmlFor="rb2">1 time fee</label><br/>
                                {this.state.showOneTimeFee &&
                                <div className="hidden-field">
                                    <input type="text" placeholder="One Time Price"/>
                                </div>
                                }
                                <input type="radio" name="payment" id="rb3" value="3" label="Subscription"
                                       onChange={this.handleChange}/>
                                <label htmlFor="rb3">Subscription</label><br/>
                                {this.state.showSubscription &&
                                <div className="hidden-field">
                                    <input type="text" placeholder="Subscription Price"/>
                                </div>
                                }
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        )
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62072109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档