【问题标题】:Radio input from map array来自地图数组的无线电输入
【发布时间】:2019-01-30 23:44:21
【问题描述】:

我正在尝试构建一个表单,其中半径是映射数组生成的选项,但出现以下错误:

未捕获的错误:输入是一个空元素标签,既不能有children,也不能使用dangerouslySetInnerHTML

以下代码用于渲染组件 React:

<form>
    <p>{this.state.current_statement}</p>
    <div>
        {this.state.current_alternative.map(item => (
            <input key={item.id} type="radio">
                <label>{item.content}</label>
            </input>
        ))}
    </div>
    <div>
        <button type="submit">Submit</button>
    </div>
</form>

【问题讨论】:

    标签: html reactjs


    【解决方案1】:

    输入是一个空元素标签

    &lt;input&gt; 元素不允许有子元素。您已将 &lt;label&gt; 元素放入输入中。 React 抱怨这一点,因为它是不允许的,尽管浏览器可能会显示它。您需要在输入旁边而不是在其中呈现标签:

    {this.state.current_alternative.map(item => (
         <React.Fragment>
             <label htmlFor={item.id}>{item.content}</label>
             <input name="someName" key={item.id} id={item.id} type="radio" />
         </React.Fragment>
    ))}
    

    为此,您需要将map() 回调返回的元素包装到Fragment&lt;div&gt; 之类的容器组件中。原因是回调必须返回单个值,例如您可以使用Fragment 实现的单个节点。

    要将标签与输入关联,请为输入分配一个id,并在label 上设置htmlFor 属性。

    【讨论】:

    • 出现如下错误,但是当我把
      我可以选择所有选项:Unexpected token <. jsx>
    • React Fragment 工作,但它选择了所有元素
    • @HiagoBonamelli prop name 和 value 之间的空格不是有效的语法。它必须是key={item.id}&lt;/div&gt; 也是如此。您不能在 jsx 中放置任意空格。
    • 有效,但我可以选择所有元素,你知道为什么吗?
    • @HiagoBonamelli 互斥选项需要具有相同的名称分配给 name 属性。 Read this.
    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2021-06-11
    • 2021-09-23
    相关资源
    最近更新 更多