Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript useState不工作-希望跟踪两个变量_Javascript_Reactjs - Fatal编程技术网

Javascript useState不工作-希望跟踪两个变量

Javascript useState不工作-希望跟踪两个变量,javascript,reactjs,Javascript,Reactjs,我试图在组件/功能的生命周期中跟踪用户输入的问题和答案 本质上,有一个随机数数组产生,然后用户记住并输入,问题是什么和输入的数据被保存,用于6个输入 代码如下 功能基线(道具){ const[Stage,setStage]=React.useState(0)//演练状态 const[time,setTime]=React.useState(false)//计时器关闭、打开或处于输入阶段。 const[question,setQuestion]=React.useState() const[qu

我试图在组件/功能的生命周期中跟踪用户输入的问题和答案

本质上,有一个随机数数组产生,然后用户记住并输入,问题是什么和输入的数据被保存,用于6个输入

代码如下

功能基线(道具){
const[Stage,setStage]=React.useState(0)//演练状态
const[time,setTime]=React.useState(false)//计时器关闭、打开或处于输入阶段。
const[question,setQuestion]=React.useState()
const[questions,setQuestions]=React.useState([])
const[answer,setAnswer]=React.useState()
常量[answers,setAnswers]=React.useState([])
const[isSubmit,setIsSubmit]=React.useState(false)
//随机字符串生成长度为n的随机字符串
//变量编号=MakeId(0+2*阶段);
变量编号='qSLeD9D0PlSE'+阶段
//qSLeD9D0PlSE
反作用(
() => {
if(answers.length==6){
//在这里,您将启动提交到服务器
setIsSubmit(真)
}
//这将设置等待时间,即3秒
如果(时间){
常量超时=设置超时(()=>{
//控制台日志(应答);
console.log(问题)
//如果执行任何操作,此块将在超时“过期”后运行
//甚至可以设定状态
设置时间('输入')
console.log('调用了超时')
},3000)//超时将在6000毫秒后过期
//请确保在卸载组件时清除超时,以避免内存丢失问题
return()=>clearTimeout(超时)
//此回调函数仅在卸载组件时运行,不重新呈现
}
},
[时间],
[答复]
)
功能更改(e){
设置应答(如目标值)
}
函数handleClick(e,数字){
如果(!isSubmit){
设置答案([…答案,答案])
设置时间(真)
}否则{
设置时间(假)
}
//setTheArray([,newElement]);
设置问题([…问题,数字])
设置阶段(阶段+1)
e、 预防默认值()
console.log('已单击链接')
}
让我们输入
if(time==true){
测试输入=(
阶段{Stage}
把数字记在脑子里!
{数字}
)
}else if(时间=‘输入’){
测试输入=(
阶段{Stage}
输入数字
答复
)
}else if(isSubmit==true&&time==false){
测试输入=(

你已经完成了测试!这是你的答案

    {answers.map((项目)=>(
  • {item}
  • ))}
) }else if(time==false){ 测试输入=(

你将要做一个小的短期记忆测试。几个字母会在你的记忆中闪现 电脑监控3秒钟。你的工作是写下尽可能多的字母 记得

) } 返回( 工作记忆测验 {testInput} ) } const侧边栏_Users=({children})=>( {儿童} ) 常量按钮基线=({handleClick})=>( handleClick(e)} className='bg-blue-500悬停:bg-blue-700shadow-xl字体半黑体四舍五入全固定右-8底-20文本xl px-8 py-3 sm:right-16 sm:BOTTER-16文本白色sm:text xl sm:py-3 sm:px-7 flex项目中心焦点:轮廓无' > 下一步 ) ReactDOM.render(,document.querySelector('#root'))

此代码非常复杂,很难理解。这使得很难看到问题是什么,以及问题来自何方

话虽如此,看起来您并没有将
数字
变量传递到
handleClick
onClick处理程序中。

在按钮组件中,您当前正在执行
onClick={(e,number)=>handleClick(e)}

这意味着在onClick处理程序中,此块中的
handleClick(e,numbers)
numbers
可能未定义

一般来说,您应该避免在子作用域中重复使用变量名,因为它可能会造成混淆和问题

除此之外,看起来您需要重新格式化useEffect依赖性数组

您应该只有一个数组,因此您应该有
[time,answers]
而不是
[time,answers]


最简单的修复方法:

onClick={(e,数字)=>handleClick(e)}
更改为
onClick={(e)=>handleClick(e,数字)}


更好的修复方法:

功能手柄点击(e,数字)
更改为
功能手柄点击(e)

更改为

最后将
handleClick(e)}/>
更改为


最佳修复方案:

上述修复有望解决您的问题,但您发布的代码很复杂,可能会导致更多问题,很难维护和调试

因此,我强烈建议将该组件重构为尽可能简单化


如果您在重构代码后仍存在此问题,您将能够重新发布此问题,社区将能够更好地调试此问题并为您提供帮助。

您的代码示例太复杂,请提供您遇到的问题的最小工作示例。请注意。我没有遵循c