简体   繁体   English

一个简单的ReactJS示例来显示警报

[英]A simple ReactJS example to show alert

I am new to reactjs. 我是Reactjs的新手。 I am using two text boxes one allows user to enter a number and display its square and another one to enter user first name and when click on submit button an alert box should come saying hello username. 我正在使用两个文本框,一个允许用户输入数字并显示其正方形,另一个允许输入用户名,当单击“提交”按钮时,应该出现一个警告框,提示用户名。 I am able to produce the square but the alert is not working properly. 我可以制作正方形,但警报无法正常工作。

This is the HTML & CSS: 这是HTML和CSS:

 class EssayForm extends React.Component { constructor(props) { super(props); this.state = { value: '', fname:'', }; this.handleChange = this.handleChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); } handleChange(event) { this.setState({value: event.target.value}); this.setState({fname: event.target.fname}); } handleSubmit(event) { event.preventDefault(); alert('Hello: ' + this.state.fname); } render() { return ( <div className="example"> <form onSubmit={this.handleSubmit}> <span>Square of:</span> <input type="text" value={this.state.value} onChange={this.handleChange} /> <span>First name:</span> <input type="text" value={this.state.fname} /> <input type="submit" value="Submit" /> </form> <div className="preview"> <h1>Square of no is</h1> <div>{this.state.value * this.state.value}</div> </div> </div> ); } } ReactDOM.render(<EssayForm />, document.getElementById('app')); 
 .example { font-family: 'Open Sans', sans-serif; display: flex; padding: 20px; form { display: flex; align-items: flex-start; margin-right: 50px; * { margin-right: 10px; } } h1 { font-size: 20px; font-weight: bold; } .preview { white-space: pre; } } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script> <div id="app"></div> 

Help me out in producing alert box with username entered. 在输入用户名的警告框帮助我。

You can check the following code to make it work. 您可以检查以下代码以使其工作。

class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            value: '',
            fname:'',
        };
    }

    handleChange(event, key) {
        let state = {};
        let value = event.target.value;
        state[key] = value;
        this.setState(state);
    }

    handleSubmit(event, name) {
        console.log(name);
        event.preventDefault();
        alert('Hello: ' + this.state.fname);
    }

    render() {
        return (
            <div className="example">
                <form onSubmit={(e) => this.handleSubmit(e)}>
                    <span>Square of:</span>
                    <input type="text"
                           value={this.state.value}
                           onChange={(e) => this.handleChange(e, "value")} />
                    <span>First name:</span>
                    <input type="text"
                           value={this.state.fname}
                           onChange={(e) => this.handleChange(e, "fname")}/>
                    <input type="submit" value="Submit" />
                </form>
                <div className="preview">
                    <h1>Square of no is</h1>
                    <div>{this.state.value * this.state.value}</div>
                </div>
            </div>
        );
    }
}

export default App;

You have to create another handler for text change and to update the state of fname properly, and make sure you do not override fname when changing square input value. 您必须创建另一个用于文本更改的处理程序,并正确更新fname的状态,并确保在更改平方输入值时不要覆盖fname

Check the code below: 检查以下代码:

 class EssayForm extends React.Component { constructor(props) { super(props); this.state = { value: '', fname:'', }; this.handleSquareChange = this.handleSquareChange.bind(this); this.handleTextChange = this.handleTextChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); } handleSquareChange(event) { this.setState({value: event.target.value}); } handleTextChange(event) { this.setState({fname: event.target.value}); } handleSubmit(event) { event.preventDefault(); alert('Hello: ' + this.state.fname); } render() { return ( <div className="example"> <form onSubmit={this.handleSubmit}> <span>Square of:</span> <input type="text" value={this.state.value} onChange={this.handleSquareChange} /> <span>First name:</span> <input type="text" value={this.state.fname} onChange={this.handleTextChange} /> <input type="submit" value="Submit" /> </form> <div className="preview"> <h1>Square of no is</h1> <div>{this.state.value * this.state.value}</div> </div> </div> ); } } ReactDOM.render(<EssayForm />, document.getElementById('app')); 
 .example { font-family: 'Open Sans', sans-serif; display: flex; padding: 20px; form { display: flex; align-items: flex-start; margin-right: 50px; * { margin-right: 10px; } } h1 { font-size: 20px; font-weight: bold; } .preview { white-space: pre; } } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script> <div id="app"></div> 

You are missing onChange handler on first name. 您缺少名字的onChange处理函数。 Also it's advisable to use another onchange listener for first name as you do not want to update number value when you update the number. 另外,建议您使用另一个onchange侦听器作为名字,因为您不想在更新号码时更新号码值。 Here is a modified version of the code: 这是代码的修改版本:

import React from 'react';

export class EssayForm extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            value: '',
            fname:'',
        };

        this.handleChange = this.handleChange.bind(this);
        this.handleNameChange = this.handleNameChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleChange(event) {
        this.setState({value: event.target.value});
    }

    handleNameChange(event){
        this.setState({fname: event.target.value});

    }

    handleSubmit(event) {
        event.preventDefault();
        alert('Hello: ' + this.state.fname);

    }

    render() {
        return (
            <div className="example">
                <form onSubmit={this.handleSubmit}>
                    <span>Square of:</span>
                    <input type="text" value={this.state.value} onChange=
                        {this.handleChange} />
                    <span>First name:</span>
                    <input type="text" value={this.state.fname}  onChange=
                        {this.handleNameChange} />
                    <input type="submit" value="Submit" />
                </form>
                <div className="preview">
                    <h1>Square of no is</h1>
                    <div>{this.state.value * this.state.value}</div>
                </div>
            </div>
        );
    }
}

There is no any change handler for fname state. fname状态没有任何更改处理程序。

Please Refer This 参考这个

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM