Я попытался преобразовать эту радиокнопку в компонент стиля.
Вы можете отключить проверенный цикл.
![enter image description here](https://i.stack.imgur.com/3uOWo.png)
App.js
import React, {useState} from "react";
import RadioButton from './RadioButton';
// https://codepen.io/satya164/pen/qdgYaO
function App() {
const [value, setValue] = useState('');
//test
console.log('value', value);
return <div className="App">
<RadioButton
checked={value === 'test1' ? true : false}
onChange={() => {setValue('test1')}}
value={'test1'}
name={'test'}
label={'test radio1'}
></RadioButton>
<RadioButton
checked={value === 'test2' ? true : false}
onChange={() => {setValue('test2')}}
value={'test2'}
name={'test'}
label={'test radio2'}
></RadioButton>
</div>;
}
export default App;
Radio button.js
import React from "react";
import {Label, Span, Input} from './index.style';
const RadioButton = ({checked, value, name, onChange, label}) => {
return (
<div>
<Label>
<Input
type="radio"
checked={checked}
value={value}
name={name}
onChange={onChange}
/>
<Span>{label}</Span>
</Label>
</div>
);
}
export default RadioButton;
style.js
import styled from 'styled-components';
export const Label = styled.label`
display: block;
//padding: .5em;
cursor: pointer;
`;
export const Span = styled.span`
&:before {
content: "";
display: inline-block;
vertical-align: -.25em;
height: 1em;
width: 1em;
border-radius: 50%;
border: 2px solid rgba(0, 0, 0, 0.5);
//margin-right: .5em;
}
`;
export const Input = styled.input`
&:checked + ${Span} {
border-color: #e48;
// bg img cycle
background-image: radial-gradient(
circle closest-side,
#e48 0%,
#e48 50%,
transparent 50%,
transparent 100%);
}
display: none;
`;
полный код:
https://github.com/kenpeter/radio-button