Javascript 为什么useState也会导致使用默认值重新执行组件
我是一个新的反应本土发展。我想了解useState是如何工作的Javascript 为什么useState也会导致使用默认值重新执行组件,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我是一个新的反应本土发展。我想了解useState是如何工作的 import React from 'react' import { View, Text } from 'react-native' import Styles from './AdsStyle' import { useContextSelector } from 'use-context-selector' import { StateContext } from './State' import { useState } f
import React from 'react'
import { View, Text } from 'react-native'
import Styles from './AdsStyle'
import { useContextSelector } from 'use-context-selector'
import { StateContext } from './State'
import { useState } from 'react'
import { useRef } from 'react'
import moment from 'moment'
import { useEffect } from 'react'
//To-do: Ads cx countdown timer.
const CountDownTimer = () => {
const myState = useContextSelector(StateContext, (state) => state.myState)
const timerRef = useRef(null)
const [timer, setTime] = useState(myState == null ? 0: myState.endTime)
if(myState === null){
clearInterval(timerRef.current)
return null
}
useEffect(()=>{
updateTimer()
return () => {
clearTimeout(timerRef.current)
}
})
let remainingTime
const updateTimer = ()=>{
timerRef.current = setInterval(()=>{
remainingTime = timer - 1000
if(remainingTime <0){
clearInterval(timerRef.current)
remainingTime = 0
}
setTime(remainingTime)
},1000)
}
const renderCountDownTimer = () => {
return (
<View>
<Text>{moment(timer).format('mm:ss')} </Text>
</View>
)}
return renderCountDownTimer()
}
export default React.memo(CountDownTimer, () => true)
从“React”导入React
从“react native”导入{View,Text}
从“./AdsStyle”导入样式
从“使用上下文选择器”导入{useContextSelector}
从“./State”导入{StateContext}
从“react”导入{useState}
从“react”导入{useRef}
从“时刻”导入时刻
从“react”导入{useEffect}
//要做的事情:Ads cx倒计时。
常量倒计时=()=>{
const myState=useContextSelector(StateContext,(state)=>state.myState)
常量timerRef=useRef(空)
const[timer,setTime]=useState(myState==null?0:myState.endTime)
if(myState==null){
clearInterval(timerRef.current)
返回空
}
useffect(()=>{
updateTimer()
return()=>{
clearTimeout(timerRef.current)
}
})
让我们留下时间
常量更新项=()=>{
timerRef.current=setInterval(()=>{
剩余时间=计时器-1000
如果(剩余时间){
返回(
{时刻(计时器).format('mm:ss')}
)}
返回renderCountDownTimer()
}
导出默认的React.memo(倒计时,()=>true)
我只是在建立倒计时。现在我面临两个问题
const[timer,setTime]=useState(myState==null?0:myState.endTime)
时,它只需转到第一行再次重新执行组件。如果在useState中有硬编码的值,一切都可以正常工作const[timer,setTime]=useState(myState==null?0:myState.endTime)
移动到
if(myState==null){
clearInterval(timerRef.current)
返回空
}渲染的钩子比上一次渲染的钩子多
有人能解释一下这两种情况吗
提前感谢您没有遵守挂钩规则您没有遵守挂钩规则