首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Bootstrap的React中的单选按钮总是发布相同的值

使用Bootstrap的React中的单选按钮总是发布相同的值
EN

Stack Overflow用户
提问于 2020-10-21 08:20:05
回答 2查看 95关注 0票数 1

我没有收到错误,但我正在编写的单选按钮总是将相同的值发送到数据库,我不确定为什么或如何修复它。

更新。我附上了完整的代码。希望这能提供更多细节。除了单选按钮之外,其他一切都可以正常工作。有没有人可以解释一下我如何解决这个问题?

代码语言:javascript
运行
复制
import React from "react";
import axios from "axios";
import Form from 'react-bootstrap/Form'
import Row from 'react-bootstrap/Col'
import Button from 'react-bootstrap/Button'
import './Form.css'
class Home extends React.Component {
    constructor(props) {
        super(props);
        this.state = { tickets: [] };
        this.firstName = React.createRef();
        this.lastName = React.createRef();
        this.email = React.createRef();
        this.category = React.createRef();
        this.content = React.createRef();
        this.urgency = React.createRef();
    }

    componentDidMount() {
        this.getData();
    }

    getData = () => {
        // Java Spring Boot uses port 8080
        let url = "http://localhost:8080/tickets";
        // axios.get(url).then(response => console.log(response.data));
        axios.get(url).then(response => this.setState({ tickets: response.data }));
    };

    addTicket = () => {
        let url = "http://localhost:8080/tickets";
        axios.post(url, {
            firstName: this.firstName.current.value,
            lastName: this.lastName.current.value,
            email: this.email.current.value,
            category: this.category.current.value,
            content: this.content.current.value,
            urgency: this.urgency.current.value

        }).then(response => {
            // refresh the data
            this.getData();
            // empty the input
            this.firstName.current.value = "";
            this.lastName.current.value = "";
            this.email.current.value = "";
            this.content.current.value = "";
        });
    };


    render() {
        return (
            <div>
                <form onSubmit={this.handleSubmit}>
                    <Form.Group className="Input">
                        <Form.Control type="text" name="firstName" placeholder="First Name" ref={this.firstName} />
                    </Form.Group>
                    <Form.Group className="Input">
                        <Form.Control type="text" name="lastName" placeholder="Last Name" ref={this.lastName} />
                    </Form.Group>
                    <Form.Group className="Input">
                        <Form.Control type="text" name="email" placeholder="Email" ref={this.email} />
                    </Form.Group>
                    <br></br>

                    <Form.Group className="dropdown">
                        <Form.Label>Select a Category:</Form.Label>
                        <Form.Control as="select" ref={this.category}>
                            <option value="hardware">Hardware</option>
                            <option value="software">Software</option>
                            <option value="internet">Internet</option>
                            <option value="other">Other</option>
                        </Form.Control>
                    </Form.Group>
                    <br></br>

                    <Form.Group className="Issue">
                        <Form.Label>Please Describe Your Issue:</Form.Label>
                        <Form.Control as="textarea" rows="7" ref={this.content} />
                    </Form.Group>

                    <fieldset>
                        <Form.Group as={Row}>
                            <Form.Label className="radio" column sm={12}>
                                Select the Urgency Level:<br></br>
                            </Form.Label>
                            <Form.Check className="radioButtons"
                                type="radio"
                                label="Urgent"
                                name="selectedOption"
                                value="Urgent"
                                ref={this.urgency}
                            />
                            <Form.Check className="radioButtons"
                                type="radio"
                                label="Standard"
                                name="selectedOption"
                                value="Standard"
                                ref={this.urgency}
                            />
                            <Form.Check className="radioButtons"
                                type="radio"
                                label="Low Priority"
                                name="selectedOption"
                                value="Low Priority"
                                ref={this.urgency}
                            />
                        </Form.Group>
                    </fieldset>

                    <Button variant="secondary" type="button" className="submit" onClick={this.addTicket}>Submit Ticket</Button>
                </form>
            </div>
        );
    }
}

export default Home;
EN

Stack Overflow用户

发布于 2020-10-21 09:16:36

问题是,您将this.urgency指向您的所有无线电组件1 /1。以下是从上到下运行代码的简要模拟:

代码语言:javascript
运行
复制
<Form.Group as={Row}>
  <Form.Label className="radio" column sm={12}>
    Select the Urgency Level:<br></br>
  </Form.Label>
  <Form.Check
    value="Urgent"
    ref={this.urgency} // <-- this.urgency is now pointing to this 1st component
  />
  <Form.Check
    value="Standard"
    ref={this.urgency} // <-- this.urgency is now pointing to this 2nd component
  />
  <Form.Check
    value="Low Priority"
    ref={this.urgency} // <-- this.urgency is now pointing to this 3rd component
  />
</Form.Group>

因此,当代码运行完成时,this.urgency的最终引用是第三个组件。因此,当您访问this.urgency.current.value时,它将始终返回第三个组件的值(即低优先级)

在React中,通常使用状态来保存这些值--仅在必要时才少量使用ref

下面是一个解决方案的示例:

代码语言:javascript
运行
复制
constructor(props) {
  super(props);
  this.state = {
    tickets: [],
    urgency: "" // state for urgency
  };

<Form.Group as={Row}>
  <Form.Label className="radio" column sm={12}>
    Select the Urgency Level:<br></br>
  </Form.Label>
  <Form.Check
    value="Urgent"
    onChange={() => this.setState({ urgency: "Urgent" })}
  />
  <Form.Check
    value="Standard"
    onChange={() => this.setState({ urgency: "Standard" })}
  />
  <Form.Check
    value="Low Priority"
    onChange={() => this.setState({ urgency: "Low Priority" })}
  />
</Form.Group>

axios
  .post(url, {
    urgency: this.state.urgency
  })
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64454965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档