色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

使用React應用新CSS時出現輕微的渲染延遲

劉姿婷2年前8瀏覽0評論

當使用React應用條件CSS時,我注意到幾毫秒的明顯延遲,我想知道我哪里做錯了。這是一個非常sm all應用程序,我正在創建,以學習框架。這是導致問題的組件:

export default function Word({ word, state, onClick }) {
  return (
    <button
      id='word'
      disabled={state !== 'gameover'}
      onClick={onClick}
      className={state === 'timesup' ? 'timesup' : ''}
      >
      {state === 'playing' && word}
      {state === 'gameover' && 'GO'}
      {state === 'timesup' && 'Time\'s up!'}
    </button>
  )
}

在我的主App.js中,它呈現為:

import { useState } from 'react';

import Timer from './components/Timer';
import Word from './components/Word';

function App() {
  const timer = 3;
  const [word, setWord] = useState('some word');
  const [state, setState] = useState('gameover');

  const handleStartGame = () => {
    setState('playing');
  }

  const handleTimesUp = async event => {
    setState('timesup');
    await sleep(3000)
    setState('gameover');
  }

  const sleep = ms => new Promise(
    resolve => setTimeout(resolve, ms)
  )

  return (
    <>
      <Timer duration={timer} isRunning={state === 'playing'} timesUp={handleTimesUp} />
      <Word word={word} state={state} onClick={handleStartGame}/>
    </>
  );
}

export default App;

我不認為這是問題的一部分,但為了不完全起見,這里Timer.js:

import { useState } from "react"
import { useEffect } from "react"

export default function Timer({ duration, isRunning, timesUp }) {
  const [time, setTime] = useState()

  useEffect(() => {
    if (isRunning) {
      const timer = time > 0 && setInterval(() => setTime(time - 1), 1000)
      if (time === 0) {
        timesUp()
      }
      return () => clearInterval(timer)
    } else {
      setTime(duration)
    }
  }, [time, isRunning])

  return (
    <div id='timer'>{time}</div>
  )
}

以及相關的CSS:

#word {
  font-size: 20px;
  font-weight: 500;
  border: 1px solid var(--color-3);
  padding: 20px;
  text-align: center;
  background-color: var(--color-5);
  margin-bottom: 20px;
  color: var(--color-2);
  width: 100%;
  height: 90px;
}

#word:disabled {
  color: var(--color-2);
  pointer-events: none;
}

#word.timesup {
  color: red;
  font-weight: 800;
}

當狀態在handleTimesUp內改變時,在文本變為& quot時間到了。并應用CSS。有那么一會兒& quot時間到了。文本仍然使用其以前的顏色呈現。

據我所知,當我在父組件上使用setState時,它會觸發該組件及其子組件的新呈現。那么所有的東西不都應該同時被畫出來嗎?避免這種延遲的方法是什么?

編輯:如果我以這種方式編寫Word組件(即不在return語句中添加類名),結果是相同的:

export default function Word({ word, state, onClick }) {
  let className = 'normal'
  if (state === 'timesup') {
    className += ' timesup'
  }

  return (
    <button
      id='word'
      disabled={state !== 'gameover'}
      onClick={onClick}
      className={className}
      >
  // etc