Кнопка переключения в React не переключается

#css #reactjs

Вопрос:

Я работаю над приложением react, в котором есть кнопка переключения. У меня есть компонент, который содержит основной контур кнопки переключения. Я могу заставить кнопку переключения работать в обычном HTML с помощью CSS. Я пытаюсь сделать то же самое в своей реакции. Создайте кнопку переключения с помощью jsx и css.

Возможно ли это? Если не следует использовать хук useState, как я могу это настроить.

Компонент

ToggleBtn.js

 const ToggleBtn = () => {
    return ( 
        <div class="space-around">
        <h3 className="h3">Annually</h3>
        <label className="switch">
            <input type="checkbox" checked/>
            <span className="slider"></span>
        </label>
        <h3 className="h3">Monthly</h3>
        </div>
     );
}
 

приложение.css

 .switch {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 34px;
  margin: 0 10px;
}
.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  transition: 0.4s;
  border-radius: 34px;
}
.switch input {
  display: none;
}
.slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: -20px;
  bottom: 4px;
  background-color: white;
  transition: 0.4s;
  border-radius: 50px;
}
input:checked   .slider {
  background-color: var(--Purplish);
}
input:checked   .slider:before {
  transform: translateX(50px);
}
 

Ответ №1:

Мне удалось заставить это работать. Я создал компонент (кнопка переключения) в его собственном файле с файлом CSS, чтобы придать ему собственный стиль, и заставил его работать.

Это используемый код.

Switch.js

импорт реакции из ‘react’; импорт «./Switch.css»;

 const Switch = () => {
    return ( 
        <label className="switch1">
        <input type="checkbox"/>
        <span className="slider1"/>
        </label>
     );
}
 
export default Switch ;
 

Switch.css

 .switch1 {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 34px;
}

.switch1 input {
  opacity: 0;
  width: 0;
  height: 0;
}

.slider1 {
  position: absolute;
  cursor: pointer;

  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  border-radius: 50px;
}

.slider1::before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  bottom: 4px;
  left: 4px;
  background-color: white;
  transition: 0.4s;
  border-radius: 50px;
}
input:checked   .slider1::before {
  transform: translateX(26px);
}

input:checked   .slider1 {
  background-color: #2196f3;
}
 

Затем я импортировал компонент в свой исходный файл переключения.

 import Switch from "./components/Switch";

const ToggleBtn = () => {
    return ( 
        <div class="space-around">
        <h3 className="h3">Annually</h3>
        <Switch />
        <h3 className="h3">Monthly</h3>
        </div>
     );
}
 
export default ToggleBtn;