当前位置: 首页 > 面试题库 >

反应输入元素:值与默认值

龙安阳
2023-03-14
问题内容

我是React和REDUX的新手,我只是开发了一个简单的react应用程序,现在我遇到了一个问题,当我在组件中渲染输入元素时,如果我将元素设置为“值”,它将变为只读,但是如果我将其设置为重新设置状态时,“
defaultValue”上的值将永远不会再更新。

这是我的代码

    import React from "react";
    export default class EditForm extends React.Component {

    editTransaction(event) {

        var transaction = this.props.transaction;

        event.preventDefault();
        var NewTransaction = {
            transactions_data: {
                amount: this.refs.amount.value
            }
        }

        this.props.editTransaction(NewTransaction, transaction.id);
    }

    closeForm() {
        this.props.closeForm();
    }

    render() {
        var {amount}=this.props.transaction;
        return (
            <div>
                <br/>
                <h4>Edit Transaction</h4>
                <div className="btn btn-danger pull-right" onClick={this.closeForm.bind(this)}>close</div>
                <div className="clearfix"></div>
                <form onSubmit={this.editTransaction.bind(this)}>
                    <div>
                        <label for="amount">Amount</label>
                        <input value={amount} onChange={(value) => this.onChange(value)} className="form-control"
                               id="amount" name="amount" type="number"
                               ref="amount"/>
                    </div>
                    <br/>
                    <br/>
                    <input className="btn btn-info" type="submit" value="submit"/>
                </form>
            </div>
        );
    }
}

然后我发现是否通过添加onChange={(value) => this.onChange(value)}输入元素而对此做出错误
,它可以正常工作(它在props或state更新时更新,并且我可以重新输入值),但是我认为这不是正确的解决方案,因为它会导致我的浏览器控制台出现错误。这是因为“
this.onChange”功能不存在。

请帮助我解决这个问题,并在此先感谢

问候,

维迪


问题答案:

您输入不工作的原因是因为你需要defineonChange功能,这实际上sets the state与更新后的值。您可能可以内联进行,因为它只需要声明

<input type="text" value={this.state.inputVal} onChange={(e) => {this.setState({inputVal: e.target.value})}} />

但是我建议您使用一种onChange方法,因为您可以同时处理多个输入,而且看起来更干净

class EditForm extends React.Component {



    constructor() {

        super();

        this.state = {



        }

    }

    onChange(e) {

         this.setState({[e.target.name]: e.target.value})

    }

    editTransaction(event) {



        var transaction = this.props.transaction;



        event.preventDefault();

        var NewTransaction = {

            transactions_data: {

                amount: this.refs.amount.value

            }

        }



        this.props.editTransaction(NewTransaction, transaction.id);

    }



    closeForm() {

        this.props.closeForm();

    }



    render() {



        return (

            <div>

                <br/>

                <h4>Edit Transaction</h4>

                <div className="btn btn-danger pull-right" onClick={this.closeForm.bind(this)}>close</div>

                <div className="clearfix"></div>

                <form onSubmit={this.editTransaction.bind(this)}>

                    <div>

                        <label for="amount">Amount</label>

                        <input value={this.state.amount} onChange={(value) => this.onChange(value)} className="form-control"

                               id="amount" name="amount" type="number"

                               ref="amount"/>

                         <input value={this.state.amount1} onChange={(value) => this.onChange(value)} className="form-control"

                               id="amount1" name="amount1" type="number"

                               ref="amount"/>

                    </div>

                    <br/>

                    <br/>

                    <input className="btn btn-info" type="submit" value="submit"/>

                </form>

            </div>

        );

    }

}



ReactDOM.render(<EditForm/>, document.getElementById('app'));


<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.2/react.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.2/react-dom.min.js"></script>

<div id="app"></div>


 类似资料:
  • 这里我使用的是react hooks状态 在这里,我试图改变来自API的默认值。但是,我不能在改变方法上改变。 谢谢

  • 请参考:http://www.kancloud.cn/manual/thinkphp/1797

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

  • 所以我才刚刚开始学习JavaFX,我用场景构建器做了几个文本字段。我为每个TextField分配了一些提示文本,但是当我启动应用程序时,第一个TextField已经被选中,所以我看不到提示文本。我能做点什么吗?

  • 问题内容: 我有一个组件,单击时需要切换一个组件。这有效: 它使用条件显示或不显示组件。现在,我希望它逐渐消失。我尝试添加一个挂钩以过渡不透明度,但这不起作用。有没有简单的方法可以做到这一点? 问题答案: 使用CSS类切换+不透明度转换的示例:https : //jsfiddle.net/e7zwhcbt/2/ 这是有趣的CSS: 和render函数:

  • 问题内容: 但它不起作用,如何设置默认值? 问题答案: 日期应采用格式。一位数的日期和月份应填充0。一月是01。 从文档中: 代表日期的字符串。 值:RFC3339中定义的有效完整日期,另外具有年份部分为四位或更多位数字表示大于0的数字的资格。 您的代码应更改为: