当前位置: 首页 > 知识库问答 >
问题:

试图使React受控输入具有默认值

姬熙云
2023-03-14

我有一个组件slider,它仅由用于某个参数标题的

和用于控制其值的输入滑块组成。该属性的标题和当前值需要道具来初始化滑块旋钮的位置。我已经阅读了React的受控组件,尽管我认为我理解了基本概念,但我很难将这个输入滑块初始化为 this.props.initialvalue。如果尝试用 赋予默认值,则得到:

bundle.js:357警告:滑块包含一个range类型的输入,它同时包含value和defaultValue道具。输入元素必须是受控或不受控的(指定value prop或defaultValue prop,但不能同时指定两者)。决定使用受控或不受控输入元素,并删除这些道具之一。更多信息:链接

这就是我首先阅读Controlled Components的原因。我想我理解了DefaultValue如何与存储状态本身的Input元素相关,而这与受控组件完全无关。

那么我的问题是如何将滑块初始化为一个值??Google搜索显示的内容很少,除了以下内容:并且由于在构造函数中,我将state.value初始化为this.props.initialvalue,所以我认为组件的第一次呈现会给出一个具有该值的滑块。但事实并非如此。

下面是我当前的组件代码:

class Slider extends React.Component {

    constructor(props) {
        super(props)

        this.state = {
            value: props.initialValue
        } 
        this.sliderChanged = this.sliderChanged.bind(this)
    }

    sliderChanged(e) {
        this.setState( { value: e.target.value} );
        this.props.valueChanged(e.target.value)
    }

    render() {

        const containerStyle = {
            display: "grid",
            gridTemplateRows: "2fr 3fr",
            textAlign: "center",
        }

        const titleStyle = {
            backgroundColor: "purple",
            color: "white",
            textAlign: "center",
        }

        const sliderStyle = {
            backgroundColor: "orange",
        }

        console.log(this.state)


        return (
            <div style={containerStyle}>
            <div style={titleStyle}>{this.props.title}</div>
            <div style={sliderStyle}>
            <input 
            type="range" 
            value={this.state.value} 
            onChange={this.sliderChanged} />
            </div>
            </div>
            )
    }
}

共1个答案

匿名用户

React blog建议使用道具强制输入到rerender,这样您就可以使用新的道具重新初始化状态。

<Slider key={initialValue}/>

共有2个答案

高功
2023-03-14
相关问题
屠晟睿
2023-03-14

React blog建议使用道具强制输入到rerender,这样您就可以使用新的道具重新初始化状态。

<Slider key={initialValue}/>
 类似资料:
  • 问题内容: 这是我的小提琴 https://codepen.io/seunlanlege/pen/XjvgPJ?editors=0011 我有两个输入,并且我试图使用一种方法来处理任何输入字段的事件。 我已经在互联网上四处寻找解决方案,但一无所获。 我正在使用es6,请问该如何处理? 问题答案: 您尚未将属性传递给handeChange函数。像传递它一样,并且接收道具的顺序是错误的,属性将是第一个

  • 我试图创建一个组件上传一个单一的图像,显示其预览和删除选项。此外,能够从后端base64编码的URL上传到字段中也很重要。这就是我此刻所拥有的。我将从应用程序状态传递到组件道具中,我实现了处理程序,这样它就可以将URL写入状态,而只是从状态中删除URL。 但是现在我想用一个拖放区域来代替通常的输入,并寻找最简单的方法来做到这一点。如果有任何帮助,我将不胜感激。 然后创建这样一个组件。 但对我不起作

  • 给定一个具有受控输入的React组件,我希望能够: 设置来自父级状态的输入值 允许用户将输入更改为任意值 只有在用户提交并且输入通过验证后才更新父级的状态。 我可以用下面的代码片段完成1和2,但是由于值是通过props进入ChildComponent的,所以我不确定如何在不更改父级上myInput的值的情况下更改输入值。

  • 在此对话框,您可以输入默认的密码,这可应用在添加、解压、测试和查看选项时。 如果“显示密码”选项被禁用并且压缩文档操作时需要密码,您将会被要求输入密码两次来进行正确性的确认。 如果您设置了“加密文件名选项”,WinRAR 不只加密数据,而且加密所有包括文件数据、文件名、大小、属性、注释和其它块等所有可感知的压缩文件区域,所以它提供了更高的安全等级。在压缩文件中使用这个命令加密,没有密码甚至不可能查

  • 在angularJs中,我有一个输入文本框,如何设置默认值?我尝试了但失败了。