【问题标题】:HTML Select: set default to given value, not from list of optionsHTML Select:将默认值设置为给定值,而不是来自选项列表
【发布时间】:2016-04-12 05:22:30
【问题描述】:

所以我意识到你可以做到

<select>
    <option value="true">True</option>
    <option value="false" selected >False</option>
</select>

选择你想要的。

但就我而言,我使用的是 React,它看起来像这样:

<select>
    {this.renderList()}
</select>

所以我无权访问这些选项。 我所拥有的是我想要作为默认选项的值。 我正在尝试显示默认值并允许用户更改它。

有没有办法使用属性来使用这个值并将默认值设置为那个?

我想要什么:

<select default={this.props.user.profile.item}>
    {this.renderList()}
</select>

就属性而言,我尝试了占位符(无效)、默认值(无效)和值(显示,但无法更改)。

【问题讨论】:

  • 试试&lt;select value={this.props.user.profile.item}&gt;

标签: javascript html reactjs


【解决方案1】:

您可以使用&lt;select&gt; 标记的value 属性在下拉列表中设置默认选项。也就是说,你可以这样做

<select value={this.props.user.profile.item}>
    {this.renderList()}
</select>

请在docs了解更多信息

更新

您也可以如下设置默认值。试试看..

<select defaultValue={this.props.user.profile.item}>
    {this.renderList()}
</select> 

查看here了解更多详情..

【讨论】:

  • 嗨,拉尔,我已经尝试过这样做,但问题是我无法更改为其他选项。此下拉列表属于 changeInfo 部分,我打算显示已设置的信息,然后允许用户更改为另一个选项。谢谢。
  • @ys27 如果您想要“不受控制的输入”,请使用defaultValue
  • 嗨,正如我在帖子中提到的,我已经尝试过这些,但它们不起作用。 DefaultValue 最初只加载一次,并且数据 {this.props.user.profile.item} 不那么早可用并且不会加载。除了 value、defaultValue 和 placeholder 之外,还有其他选项吗?谢谢。
  • @ys27 您在帖子中没有提到时间问题,实际上我什至会说这个答案 is 是您问题的正确答案,但是您的问题是您在此评论中提出的另一个问题。
  • @Aaron 我应该在问题中添加什么以使其更清楚?
【解决方案2】:

您可以使用 componentDidMount() 方法并将 select Dom 元素的值更改为默认值。

【讨论】:

    【解决方案3】:

    这个方案提供了一个解决方案,但是存在刷新搞砸DOM、刷新时值设置不正确等问题。一切正常,无需刷新。

    在选择时,我使用 value 和 onChange。

    例如)

    <select onChange={this.changeItem} value= 
                  {this.props.user.profile.item}
                  ref="item">
        {this.renderItems()}
    </select>
    

    另外,函数changeItem:

    changeItem() {
        this.setState({
            item: ReactDOM.findDOMNode(this.refs.item).value
         });
    }
    

    【讨论】:

    • 我不明白。此代码将不允许更改&lt;select&gt;。大概你在某处处理state.item 来更新user.profile.item
    • 我不确定。我认为通过在changeItem中使用setState,可以更改值,结果就是这样。 user.profile.item 仅在提交表单时(来自 db)最后更改
    【解决方案4】:

    Lal 已经通过指出 valuedefaultValue 回答了您的问题,但随后您添加了以下评论:

    DefaultValue 最初只加载一次,数据 {this.props.user.profile.item} 不那么早可用,将 不加载。

    因此,如果我理解:您没有初始值,您想在 props 更改时更新值,但允许用户在之后更改值,而与原始值无关。在这种情况下,您应该使用componentWillReceiveProps:

    以此为契机,在之前对道具过渡做出反应 通过使用this.setState() 更新状态来调用render()。 旧道具可以通过this.props 访问。打电话 此函数中的 this.setState() 不会触发额外的 渲染。

    例子:

    componentWillReceieveProps(nextProps) {
        if (this.state.item != nextProps.user.profile.item) {
            this.setState({item: nextProps.user.profile.item});
        }
    }
    
    handleChange = (event) => {
        this.setState({item: event.currentTarget.value});
    }
    
    <select value={this.state.item} onChange={this.handleChange}>
        {this.renderItems()}
    </select>
    

    【讨论】:

    • 嗨,Lal 向我展示的是我已经尝试过的,但我想我没有说清楚。所以我确实有一个初始值,这就是我最初设置的值,是的,我确实想在用户更改该值时更新该值,无论它是否使用道具。我又回到了这个问题,因为 setState 中更改的值是以前的值。我会试试componentWillReceiveProps。谢谢。
    • nextProps.user.profile.item 部分我不太明白。为什么会首先更改状态触发 componentWillReceiveProps??
    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2022-11-29
    相关资源
    最近更新 更多