【问题标题】:Dynamic Text Display with Radio Buttons in ReactReact 中带有单选按钮的动态文本显示
【发布时间】:2019-08-07 23:58:25
【问题描述】:

我正在进行多项选择测验。对于每个问题,每个选项都实现为一个单选按钮。

当用户选择一个选项时,我想显示与他们选择的特定选项相关的文本。

到目前为止,我已经能够实现单选按钮并处理 onChange 事件。 但是,我不知道如何在选择一个选项时显示某些文本(并隐藏其他选项)。

import React from 'react';
import styled from '@emotion/styled'

class Budget extends React.Component {
state = {
  studentLoanPayment: 0,
};

handleInputChange = event => {
    const { name, value } = event.target;
    console.log(name, value, event.target)
    this.setState({ [name]: value });
    /* the below code does not work
    var parent = event.target.parent;
    parent.find('DynamicText').show(); 

   */
};

render() {
  const {
      studentLoanPayment
  } = this.state;

  const totalMonthsDisplay = studentLoanPayment;

    return (
      <div>
          <UL>
              <Li>
                  <h4>
                      How much money should Leif put towards student loans
                      each month?
                  </h4>
              </Li>
              <li>
                          <Label>
                              <input
                                  type="radio"
                                  name="studentLoanPayment"
                                  value="400"
                                  onChange={this.handleInputChange}
                              />
                              400
                            <DynamicText>hidden op1 text</DynamicText>
                          </Label>
              </li>
              <li>
                          <Label>
                              <input
                                  type="radio"
                                  name="studentLoanPayment"
                                  value="500"
                                  onChange={this.handleInputChange}
                              />
                              500
                              <DynamicText>hidden op2 text</DynamicText>
                          </Label>
              </li>
              <li>
                <Label>
                  <input
                    type="radio"
                    name="studentLoanPayment"
                    value="200"
                    onChange={this.handleInputChange}>
                  </input>
                  200
                  <DynamicText>hidden op3 text</DynamicText>
                </Label>
             </li>
          </UL>
        );
      }
   }
const DynamicText = styled.ul`
    display:none;
`

【问题讨论】:

  • 有两种方法可以做到这一点,或者使用条件 jsx 语句包装您的 &lt;DynamicText&gt;,该语句检查该输入的状态更新(您可能希望为每个收音机使用唯一的 id,以便您可以将该状态值用作显示布尔值),或使用 refs 将 DynamicText 与输入相关联。

标签: javascript reactjs radio-button


【解决方案1】:

这是一个示例,说明如何使用 state 实现上述目标:https://codesandbox.io/s/focused-sun-bluru?fontsize=14

请注意,我已对您的代码进行了一些小改动以使其正常工作,您需要清理 dom 元素上的大小写并确保正确关闭 dom 标签。我还用 div 替换了您的 DynamicText 组件,但同样的逻辑也适用。

【讨论】:

  • 我正在使用 Emotion 进行造型!这就是为什么我的一些标签是大写的。但是逻辑看起来很棒!
  • 啊,对不起,我没有使用 Emotion,所以我不确定那里发生了什么
  • 有没有办法选择多个状态?我有几个问题,当用户继续测验时,我希望显示的文本留在上一个答案的旁边
  • 也许如果你改为使用复选框而不是单选按钮是的。您只需要保留一组当前选定的 ID。
猜你喜欢
  • 2021-05-15
  • 2015-02-10
  • 1970-01-01
  • 2021-06-19
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多