当前位置: 首页 > 知识库问答 >
问题:

为什么USESTECT钩子将状态改变为上一次点击?[副本]

蓬化
2023-03-14

我正在使用USESTEAT钩子,似乎钩子不正常工作。当我单击一个单选按钮时,最初它不会记录任何内容,但在我第二次单击后,它会记录我单击的前一个单选按钮。每次我单击任何按钮,它都会记录我以前单击的按钮。#sideNote:(我导入的'info'是一个对象数组,每个'increct_answers'属性都有一个数组作为值)。下面是我的代码:

import React, {useState} from 'react'
import { info } from "./data";

const Quiz = () => {

const [i, setI] = useState(0);
const [value, setValue] = useState('');

const {correct_answer, incorrect_answers} = info[i]
const arr = [correct_answer, ...incorrect_answers].sort((a, b) => a.length - b.length);
console.log(arr)

const handleSubmit = (e) => {
    e.preventDefault();
    setI(i + 1);
}

const handleChange = (e) => {
    setValue(e.target.value);
    console.log(value);
}

return (
    <div className="quiz">
        <form className='quiz__form' onSubmit={(e) => handleSubmit(e)}>
            <div className="form__body" >
                {arr.map((item, index) => {
                    return (
                        <div className="form__item" key={index}>
                            <label htmlFor={`option-${index}`}>
                                <input 
                                    type="radio" 
                                    name="options" 
                                    id={`option-${index}`}
                                    value={item}
                                    onClick={(e) =>  handleChange(e)}
                                /> {item}
                            </label>
                        </div>
                    )
                })}
            </div>  
        </form>
    </div>
)
}

共有1个答案

闽念
2023-03-14

setvalue是异步的。所以你将不得不等待看到变化。要看到更改,可以做的一件事是添加以下代码

useEffect(() => {
    console.log(value)
}, [value])

这样,您就可以看到的值何时更改

 类似资料:
  • 假设我们有两个组件(父组件和子组件),基本上我要将父组件的状态变量发送到子组件的输入元素以执行一些操作。就像... 我的子组件如下所示.. 基本上我想做三件事 null 有人能帮我做这个吗? 附:我的的组件目标文本不应该更新我的的状态变量(名称)我的意思是,没有回调作为道具。

  • 所以我的问题是,当我点击一个radiobutton来添加类“Completed”时,它执行了所要执行的操作,但是当我想要移除它时,我需要点击两次,我不知道为什么。如有任何帮助,我们将不胜感激。谢谢 HTML CSS JavaScript

  • 我在一个页面上有100个Post组件。每个都有状态。我也在这一页上单独列出了这些文章的标题。如果单击列表中的项目,则我希望将Post组件的状态更改为isActive:true,并将rest组件中的状态更改为isActive:false。 我的Posts组件超过Post组件,所以我应该在Posts组件中迭代所有Post组件,并将change state设置为isActive:false,而不使用当前

  • 如果你用移动设备在这个网页上点击它们,它们就会变小。我怎么能阻止它? 和我的CSS样式部分有关系吗?

  • 我有一个名为use的钩子。 当我硬编码时, 我得到了想要的输出。 但当我使用for循环来获取存储在数组中的ID时,我得到了“比上一次渲染时更多的钩子”错误