React implements the sample code of Radio component

React implements the sample code of Radio component

This article aims to use the clearest structure to implement the basic functions of some components. I hope to learn and make progress together with you.

Effect display:

Test components:

class Test extends Component {
  constructor(props) {
    super(props)
    this.state = {
      active:1
    }
  }
  onGroupChange(value) {
    this.setState({
      active: value
    })
  }
  render() {
    return (
     <div>
      <RadioGroup onChange={this.onGroupChange.bind(this)} active={this.state.active}>
         <Radio value={1}>Pay with balance</Radio>
         <Radio value={2}>Use WeChat Pay</Radio>
      </RadioGroup>
      <Button onClick={()=>{
             console.log("The current selection is: "+this.state.active)
           }}>Next</Button>
     </div>
      )
  }
}
export default Test;

RadioGroup:

import React, { Component } from 'react';
class RadioGroup extends Component {
  handleActiveChange(value) {
    console.log(`${value} is selected`)
    this.props.onChange(value)
  }
  render() {
    return (
      <div>
        {
          React.Children.map(this.props.children, child => {
            let isActive = this.props.active === child.props.value ? true : false
            return React.cloneElement(child, {
              label: child.props.children,
              value: child.props.value,
              active: isActive,
              onClick: this.handleActiveChange.bind(this)
            })
          })
        }
      </div>
    )
  }
}
export default RadioGroup;

Radio.jsx:

import React, { Component } from 'react';
import "./radio.scss"
class Radio extends Component {
  render() {
    return (
      <div className="radio-wrap" onClick={this.props.onClick.bind(this,this.props.value)}>
        <div className="left">
          <div className={`circle ${this.props.active === true ? 'active' : ''} `}>
            <div className="fork"></div>
          </div>
          <div className="label">{this.props.label}</div>
        </div>
      </div>
    )
  }
}
export default Radio;

Radio.scss:

.radio-wrap {
  height: 40px;
  background-color: #ffffff;
  display: flex;
  align-items: center;
  padding: 0px 30px;

  &:active {
    background-color: rgb(221, 221, 221);
  }

  .left {
    display: inline-block;

    .circle {
      display: inline-block;
      height: 22px;
      width: 22px;
      box-sizing: border-box;
      border: 1px solid #c5c9cd;
      border-radius: 50%;
      background-color: #ffffff;
      position: relative;

      
    }
    .active{
      background-color: #1eb94a;
      .fork {
        height: 12px;
        width: 5px;
        border-right: 1.5px solid #ffffff;
        border-bottom: 1.5px solid #ffffff;
        position: absolute;
        top: 40%;
        left: 50%;
        transform: translate(-50%, -50%) rotate(45deg);
      }
    }

    .label {
      vertical-align: top;
      margin-left: 10px;
      display: inline-block;
      height: 22px;
      line-height: 22px;
      font-size: 14px;
    }
  }
}

This is the end of this article about the sample code of implementing Radio component in react. For more relevant content about implementing Radio component in react, please search previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • React error boundary component processing
  • Detailed explanation of react setState
  • Tips for writing concise React components
  • Example of using setInterval function in React
  • Andrew Ng's machine learning exercise: SVM support vector machine

<<:  Detailed explanation of the use and differences of various lock mechanisms in Linux

>>:  How to solve the Mysql transaction operation failure

Recommend

Mysql method to copy a column of data in one table to a column in another table

mysql copy one table column to another table Some...

How to count the number of specific characters in a file in Linux

Counting the number of a string in a file is actu...

Syntax alias problem based on delete in mysql

Table of contents MySQL delete syntax alias probl...

VScode Remote SSH remote editing and debugging code

The latest Insider version of Visual Studio Code ...

How to embed flash video format (flv, swf) files in html files

Flash file formats: .FLV and .SWF There are two ex...

Detailed explanation of COLLATION examples in MySQL that you may have overlooked

Preface The string types of MySQL database are CH...

Use Vue3+Vant component to implement App search history function (sample code)

I am currently developing a new app project. This...

Lombok implementation JSR-269

Preface Introduction Lombok is a handy tool, just...

Vue interpretation of responsive principle source code analysis

Table of contents initialization initState() init...

MySQL8.0.18 configuration of multiple masters and one slave

Table of contents 1. Realistic Background 2. Agre...

How to install Postgres 12 + pgadmin in local Docker (support Apple M1)

Table of contents introduce Support Intel CPU Sup...

MySQL 5.7.31 64-bit free installation version tutorial diagram

1. Download Download address: https://dev.mysql.c...