Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Reactjs 反应子组件don';父状态更改后无法更新_Reactjs_React Native_React State - Fatal编程技术网

Reactjs 反应子组件don';父状态更改后无法更新

Reactjs 反应子组件don';父状态更改后无法更新,reactjs,react-native,react-state,Reactjs,React Native,React State,这个问题已经被问了好几次了,但我只能找到类组件的答案,而不能找到函数组件的答案,我的问题对我来说似乎有点奇怪,所以我对React为什么会有这样的行为感兴趣 我想在React Native中创建一个计时器 当计时器结束时,它会触发onTimeEnd方法,该方法更新应用程序组件的状态,并在计时器组件的timeinse道具上触发useffect 按下应用程序组件的重置按钮时,它会更新应用程序组件的状态,但不会触发计时器组件的useffect。我不明白为什么 我希望你能明白我的代码是什么意思(我删除了我

这个问题已经被问了好几次了,但我只能找到类组件的答案,而不能找到函数组件的答案,我的问题对我来说似乎有点奇怪,所以我对React为什么会有这样的行为感兴趣

我想在React Native中创建一个计时器

当计时器结束时,它会触发
onTimeEnd
方法,该方法更新应用程序组件的状态,并在计时器组件的
timeinse
道具上触发
useffect

按下应用程序组件的重置按钮时,它会更新应用程序组件的状态,但不会触发计时器组件的
useffect
。我不明白为什么

我希望你能明白我的代码是什么意思(我删除了我认为不会影响此代码的其他功能)

应用程序
组件:

import React,{useState}来自“React”
从“react native”导入{TouchableOpacity,StyleSheet,Text,View,TextInput}
从“./components/Layout”导入布局
从“./components/Timer”导入计时器
常量应用=()=>{
const defaultTime=20
常量[timeLeft,setTimeLeft]=useState(默认时间)
const onTimeEnd=()=>{
setTimeLeft(默认时间)
}
常量重置计时器=()=>{
setTimeLeft(默认时间)
}
返回(
重置
);
}
导出默认应用程序
计时器
组件:

import React,{useffect,useState}来自“React”
从“react native”导入{View,Text}
常量计时器=(道具)=>{
const[timeInSec,setTimeInSec]=useState(props.timeInSec)
useffect(()=>{
常量间隔=设置间隔(()=>{
const newTime=timeInSec-1
setTimeInSec(新时间)
如果(newTime==0){
清除间隔(间隔)
props.onTimeEnd()
}
}, 1000)
return()=>clearInterval(间隔)
})
useffect(()=>{
//当应用程序组件的状态从onTimeEnd函数更改时,会触发此useEffect,
//但当它从resetTimer功能更改时不会。为什么?
setTimeInSec(props.timeInSec)
},[props.timeinse])
返回(
{timeinset}
)
}
导出默认计时器

问题与使用效果无关。。。该组件在状态更新后没有重新加载,因为我正在用相同的值更新它。很明显,useEffect没有被触发。

请参阅Thank@ShivamJha!事实上,我发现问题与使用效果无关。。。该组件在状态更新后没有重新加载,因为我正在用相同的值更新它。很明显,使用效果没有被触发。好吧,酷!您应用了什么修复方法?@ShivamJha我从
defaultTime
常量中创建了一个新的
Number
setTimeLeft(新数字(defaultTime))