【问题标题】:In React how to check input radio checked or not only if the variable is defined ?在 React 中,如果变量已定义,如何检查输入单选是否已检查?
【发布时间】:2018-09-07 17:08:28
【问题描述】:

如果已经在状态中选择了这样的答案,则可以正常工作????

this.state = {
  answers: [
    {
      questionID: "1",
      answerValues: "2"
    }
  ]
};

默认空状态为this.state = { answers: [] };,控制台在checked={option.id == checked.answerValues} 显示未捕获的类型错误:无法读取未定义的属性“answerValues”。当然它不会起作用,因为对象是空的。

<input
  name={name}
  id={`${name}-${option.id}`}
  data-question-id={questionID}
  type="radio"
  onChange={onChange}
  value={option.id}
  checked={option.id == checked.answerValues}
  /> {option.value}

演示:https://codesandbox.io/s/wyymx2jvrw

JSX 中是否有任何选项可以检查仅当 answers: [] 不为空时检查的输入

【问题讨论】:

  • 您遗漏了很多重要的代码。检查变量从何而来?
  • @JoelHarkes 默认情况下没有可用的检查变量。当用户从单选按钮中选择时,它正在添加到状态。您可以在链接codesandbox.io/s/mm4qrv4o6j 中看到如果用户已经选择了答案,它可以正常工作

标签: javascript json reactjs ecmascript-6 jsx


【解决方案1】:

参考代码沙箱: 错误与反应无关。这是普通的旧js。 您正在尝试访问 undefined & 上无效的属性。

{option.id == checked.answerValues} 这里checked 作为属性传递给InputRadio 组件。如果不传递值,则默认为未定义。

快速解决方法是为该属性设置一个 defaultValue。空对象将是正确的候选对象。

查看它在沙盒分支https://codesandbox.io/s/n58j54pr84中使用默认值

代码的相关部分

const InputRadio = ({
  name,
  label,
  questionID,
  onChange,
  value,
  options,
  checked = {}  // <--- set a default value
}) => {

【讨论】:

  • 是的,ES6 中的默认参数可以解决此类问题? 非常感谢剩下的朋友? 我只能投单票抱歉,非常感谢您的快速解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 2018-05-21
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多