React Semantic UI Radio 检查值消失

React Semantic UI Radio check value disappearing

提问人:Rafael Polonio 提问时间:2/28/2023 更新时间:2/28/2023 访问量:33

问:

我有一个问题列表,在每个问题中,我都有无线电选择,我可以选择“单选”或“多选”值

问题是,如果我为不同的问题选择相同的值,例如单选,则检查仅出现在其中一个问题中

下面的打印屏幕(在这种情况下,两者都选择单选):

enter image description here

如果我有一个多选和一个单选,它运行良好,检查在正确的位置

法典:

                <SetUpContainer marginTop>
                  <SegmentTitle>
                    Multiple choice options
                  </SegmentTitle>
                  <Radio
                    value={question.type}
                    name="Single Select"
                    label="Single select - participants can select one option"
                    checked={question.type === 'single_select'}
                    onClick={() => handleSelectionTypeChange(indexQuestion, 'single_select')}
                  />
                  <Radio
                    value={question.type}
                    name="Multiple Select"
                    label="Multiple select - participants can select one or more options"
                    checked={question.type === 'multiple_select'}
                    onClick={() => handleSelectionTypeChange(indexQuestion, 'multiple_select')}
                  />
                </SetUpContainer>

有谁知道为什么会这样?

reactjs 语义-ui-react

评论


答:

1赞 haptn 2/28/2023 #1

在这种情况下,您有一个问题列表,因此您还需要为每个 Radio 指定一个唯一的名称或其他任何名称来区分这些单选按钮,否则,只会检查最后一个匹配项。

我有一些想法来处理这个问题。我还没有测试,只是起草这个想法。

解决方案 1:

{questions?.map(question => (
  /* ... */

  <SetUpContainer marginTop>
    <SegmentTitle>
      Multiple choice options
    </SegmentTitle>
    <Radio
      value={question.type}
      name={`Single Select-Q${question.no}`}
      label="Single select - participants can select one option"
      checked={question.type === 'single_select'}
      onClick={() => handleSelectionTypeChange(indexQuestion, 'single_select')}
    />
    <Radio
      value={question.type}
      name={`Multiple Select-Q${question.no}`}
      label="Multiple select - participants can select one or more options"
      checked={question.type === 'multiple_select'}
      onClick={() => handleSelectionTypeChange(indexQuestion, 'multiple_select')}
    />
  </SetUpContainer>

  /* ... */

}

解决方案 2:

const [listOptions, setListOptions] = useState({
  // 'Q1': 'single_select',      // just an example
  // 'Q2': 'multiple_select',    // just an example
})

return (
  {questions?.map(question => (
    /* ... */

    <SetUpContainer marginTop>
      <SegmentTitle>
        Multiple choice options
      </SegmentTitle>
      <Radio
        value={question.type}
        name="Single Select"
        label="Single select - participants can select one option"
        checked={listOptions[question.no] === 'single_select'}
        onClick={() => handleSelectionTypeChange(indexQuestion, 'single_select')}
      />
      <Radio
        value={question.type}
        name="Multiple Select"
        label="Multiple select - participants can select one or more options"
        checked={listOptions[question.no] === 'multiple_select'}
        onClick={() => handleSelectionTypeChange(indexQuestion, 'multiple_select')}
      />
    </SetUpContainer>

    /* ... */

  }
)