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