如何根据当前状态值使单选按钮选中/激活

Posted

技术标签:

【中文标题】如何根据当前状态值使单选按钮选中/激活【英文标题】:How to make radio button checked/active depending on current state value 【发布时间】:2021-02-05 18:18:33 【问题描述】:

所以我有一个标题,它每 5 秒循环显示 4 个图像。用户还可以使用 5 个单选按钮自行循环浏览这些图像。

当用户自己点击它时,激活/选中单选按钮的样式会被应用,但是,如果计时器切换图像,活动单选按钮保持不变。

我知道这是基于我下面的代码的预期行为,我只是想知道如何更改选中的单选按钮以匹配它的当前图像!

任何帮助将不胜感激!

constructor(props) 
  super(props);

  this.state = 
      time: 0,
      start: 0,
      currentIndex: 0
  ;
  this.setIndex = this.setIndex.bind(this);
  this.startTimer = this.startTimer.bind(this);
  this.resetTimer = this.resetTimer.bind(this);


componentDidMount() 
    this.startTimer();

componentDidUpdate() 
    if (this.state.time === 5) 
        this.setIndex(this.state.currentIndex + 1);
    

startTimer() 
    this.timer = setInterval(
        () =>
            this.setState(
                time: this.state.time + 1
            ),
        1000
    );

resetTimer() 
    this.setState( time: 0 );


setIndex(index, e) 
    console.log("changing");
    if (index < 0) 
        index = headers.length - 1;
    
    if (index >= headers.length) 
        index = 0;
    

    this.setState(
        currentIndex: index,
        time: Date.now() - this.state.start
    );
    this.resetTimer();

... 跳过的代码

<div className="carousel">
    <img
       
       className="background-img"
       src=headers[this.state.currentIndex].image
    />
       <div className="buttons-container">
            <input
                  type="radio"
                   value="1"
                   defaultChecked
                   name="index"
                   onClick=() => this.setIndex(0)
            ></input>
            <input
                   type="radio"
                   value="2"
                   name="index"
                   onClick=() => this.setIndex(1)
            ></input>
            <input
                   type="radio"
                   value="3"
                   name="index"
                   onClick=() => this.setIndex(2)
             ></input>
              <input
                   type="radio"
                   value="4"
                   name="index"
                   onClick=() => this.setIndex(3)
              ></input>
       </div>
 </div>

【问题讨论】:

【参考方案1】:

如果我理解正确,您使用的单选按钮在点击时会被激活(这是默认的 html 行为),而在使用计时器时则不会。

小菜一碟,每次定时器切换后台时,只需通过JS激活即可。

您可能假设您的 setIndex() 函数将在您的计时器每次进行更改时运行,但事实并非如此,因为该函数仅在人们实际点击收音机或发出 onClick 事件时才会启动。 因为:

onClick=() => this.setIndex(3)

要修复它,您应该修改这段代码:

startTimer() 
    this.timer = setInterval(
        () =>
            this.setState(
                time: this.state.time + 1
            ),
        1000
    );

resetTimer() 
    this.setState( time: 0 );

在那里你应该设置单选框的值,并更新索引的状态。

重置时记得重置状态值功能并将单选框的值设置为#1单选。

【讨论】:

【参考方案2】:

您可以查看currentIndex 以获得自动更改单选按钮。

render函数中

const  currentIndex  = this.state
      <div className="buttons-container">
        <input
          type="radio"
          value="1"
          defaultChecked
          name="index"
          checked=currentIndex === 0
          onClick=() => this.setIndex(0)
        ></input>
        <input
          type="radio"
          value="2"
          name="index"
          checked=currentIndex === 1
          onClick=() => this.setIndex(1)
        ></input>
        <input
          type="radio"
          value="3"
          name="index"
          checked=currentIndex === 2
          onClick=() => this.setIndex(2)
        ></input>
        <input
          type="radio"
          value="4"
          name="index"
          checked=currentIndex === 3
          onClick=() => this.setIndex(3)
        ></input>
       </div>

【讨论】:

以上是关于如何根据当前状态值使单选按钮选中/激活的主要内容,如果未能解决你的问题,请参考以下文章

如何按状态值更改选中(选定)单选按钮[重复]

如何使单选按钮只读但不禁用?

Reactjs:我正在根据状态检查单选按钮,但在选中一个单选按钮时无法单击其他单选按钮

如何使单选按钮返回布尔值真/假而不是开/关

使单选按钮更大?

单选按钮的 HTML 表。使单选按钮可单击单元格中的任何位置