как изменить это состояние с помощью радио кнопок - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть несколько выбираемых кнопок, которые я хочу изменить, выбрав любую из этих переключателей состояния, которые я хочу использовать в качестве параметра для отправки информации в API

import React ,{Component} from 'react';
import axios from "axios/index";

export default class Test extends Component {

    constructor(props) {
        super(props);
        this.state = {
            TypeStatus: '',
            OperatingStatus: '',
            RegistrationStatus: '',
        }
    }

Это мои коды Axios

componentDidMount(){
    axios({
        method: 'post',
        url: 'https://test.ir/api/registerANewAdd',
        data: {
            TypeStatus: '',
            OperatingStatus: '',
            RegistrationStatus: '',
        }
    })
    .then(function (response) {
        console.log(response);
    })
    .catch(function (error) {
        console.log(error);
    });
}

и это мои кнопки

render() {
    return (
        <div className="container-fluid">
            <div className="row RegisterOptions">
                <div className="col" data-toggle="buttons">
                    <label className="RegisterButtons">
                        <input type="radio" name="TypeStatus" id="Justice" />
                        options1-1
                    </label>
                </div>
                <div className="col" data-toggle="buttons">
                    <label className="RegisterButtons">
                        <input type="radio" name="TypeStatus" id="Credit" />
                        options1-2
                    </label>
                </div>
            </div>
            <div className="row RegisterOptions">
                <div className="col" data-toggle="buttons">
                    <label className="RegisterButtons">
                        <input type="radio" name="OperatingStatus" id="New" />
                        options2-1
                    </label>
                </div>
                <div className="col" data-toggle="buttons">
                    <label className="RegisterButtons">
                        <input type="radio" name="OperatingStatus" id="LowPerformance" />
                        options2-2
                    </label>
                </div>
                <div className="col" data-toggle="buttons">
                    <label className="RegisterButtons">
                        <input type="radio" name="OperatingStatus" id="Old" />
                        options2-3
                    </label>
                </div>
            </div>
            <div className="row RegisterOptions">
                <div className="col" data-toggle="buttons">
                    <label className="RegisterButtons">
                        <input type="radio" name="RegistrationStatus" id="Unregistered" autoComplete="off" />
                        options3-1
                    </label>
                </div>
                <div className="col" data-toggle="buttons">
                    <label className="RegisterButtons">
                        <input type="radio" name="RegistrationStatus" id="Registered" />
                        options3-2
                    </label>
                </div>
            </div>
        </div>
    );
}

Пожалуйста, помогите.Я хотел бы нажать на любую из этих кнопок, чтобы добавить класс в свой список, и каждая из этих групп является просто опцией.

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Вы должны предоставить реквизиты value и onChange на ваш radio вход.

<div className="row RegisterOptions">
    <div className="col" data-toggle="buttons">
        <label className="RegisterButtons">
            <input type="radio" name="TypeStatus" id="Justice" value="Justice" onChange={this.changeHandle}/>
            options1-1
        </label>
    </div>
    <div className="col" data-toggle="buttons">
        <label className="RegisterButtons">
            <input type="radio" name="TypeStatus" id="Credit" value="Credit" onChange={this.changeHandle}/>
            options1-2
        </label>
    </div>
</div>

Здесь ваше значение будет меняться в зависимости от радиовхода, но changeHandle останется одинаковым для всехрадиовходы.

Ваш changeHandle должен быть таким,

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

Демо


Затем вы можете использовать значения из состояниядля вашего axios звонка.Вы должны сделать отдельную функцию для вызова API

callAPI = () => {
    axios({
        method: 'post',
        url: 'https://test.ir/api/registerANewAdd',
        data: {
            TypeStatus: this.state.TypeStatus,
            OperatingStatus: this.state.OperatingStatus,
            RegistrationStatus: this.state.RegistrationStatus,
        }
    })
    .then(function (response) {
        console.log(response);
    })
    .catch(function (error) {
        console.log(error);
    });
}

Теперь эту функцию можно вызывать из любого места, например, по нажатию кнопки отправки,

<button onClick={this.callAPI}>Submit</button>

или componentDidMount,

componentDidMount(){
   this.callAPI();
}
0 голосов
/ 26 сентября 2019
import React, { Component } from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
import './style.css';

class App extends Component {
  constructor() {
    super();
    this.state = {
      TypeStatus: '',
      OperatingStatus: '',
      RegistrationStatus: '',
    };
  }

  // handleStateClick = () =>

  render() {
    return (
      <div>
        <button onClick={() => this.setState({ TypeStatus: " TypeStatus clicked" }, console.log(this.state.TypeStatus))}>TypeStatus</button>
        <button onClick={() => this.setState({ OperatingStatus: " OperatingStatus clicked" }, console.log(this.state.OperatingStatus))}>OperatingStatus</button>
        <button onClick={() => this.setState({ RegistrationStatus: " RegistrationStatus clicked" }, console.log(this.state.RegistrationStatus))}>RegistrationStatus</button>
      </div>
    );
  }
}

render(<App />, document.getElementById('root'));

https://stackblitz.com/edit/react-ahytle?file=index.js

...