首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当一个元素显示在react中时,我如何使所有元素消失?

当一个元素显示在react中时,我如何使所有元素消失?
EN

Stack Overflow用户
提问于 2022-06-15 18:42:34
回答 1查看 20关注 0票数 0

我申请倒计时。总是有一个倒计时,在默认情况下,直到新年倒计时。我也有按钮为每一个主题的倒计时。但我想,当一个按钮被点击时,倒计时就会显示出来,而之前显示的倒计时就会消失。当另一个人出现的时候,我该怎么做呢?

App.js

代码语言:javascript
复制
import './App.css';
import React from "react";
import NewYear from './Components/NewYear';
import Chinese from './Components/Chinese';
import Birthday from './Components/Birthday';
import {useState} from 'react';

function App() {
  const [isShown, setIsShown] = useState(true);
  const [isShown2, setIsShown2] = useState(false);
  const [isShown3, setIsShown3] = useState(false);

  const handleClick = event => {
    setIsShown(current => !current);
  };
  const handleClick2 = event => {
    setIsShown2(current => !current);
  };
  const handleClick3 = event => {
    setIsShown3(current => !current);
  };

  return (
    <div className="App">
      {isShown && (<NewYear/>)}  
      {isShown2 && (<Chinese/>)}  
      {isShown3 && (<Birthday />)}  
      <button onClick={handleClick} className='nieuw'>New Year</button>
      <button onClick={handleClick2} className='chinees'>Chinese New Year</button>
      <button onClick={handleClick3} className='verjaardag'>My Birthday</button>
    </div>
  );
  };

export default App;

组件

代码语言:javascript
复制
import React, {useEffect, useState} from "react";
import './styles.css';

function NewYear() {
    const calculateTimeLeft = () => {
        let year = new Date().getFullYear();
    
        const difference = +new Date(`01/01/${year+1}`) - +new Date();
        
        let timeLeft = {};
    
        if (difference > 0) {
          timeLeft = {
            days: Math.floor(difference / (1000 * 60 * 60 * 24)),
            hours: Math.floor((difference / (1000 * 60 * 60)) % 24), 
            minutes: Math.floor((difference / 1000 / 60) % 60),
            seconds: Math.floor((difference / 1000) % 60)
          };
        }
    
        return timeLeft
      };
        
        const [timeLeft, setTimeLeft] = useState(calculateTimeLeft());
        const [year] = useState(new Date().getFullYear());
    
        useEffect(() => {
          const timer = setTimeout(() => {
            setTimeLeft(calculateTimeLeft());
          }, 1000);
          return () => clearTimeout(timer);
        });
        const timerComponents = [];
    
      Object.keys(timeLeft).forEach((interval) => {
        if (!timeLeft[interval]) {
          return;
      }
    
      timerComponents.push(
        <span>
          {timeLeft[interval]} {interval}{" "}
        </span>
      );
      });
      return (
        <div className="nieuwjaar">
          <h1>New Year {year+1} Countdown</h1>
          {timerComponents.length ? timerComponents : <span>Time's up!</span>}
        </div>
      );
}

export default NewYear;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-15 19:00:06

这里有一种方法,不需要为每个倒计时使用单独的布尔状态值,您可以跟踪活动的状态。

代码语言:javascript
复制
function App() {
    const [activeCountDown, setActiveCountDown] = useState('NewYear');

    const handleCountDownClick = (counterId) => () => setActiveCountDown(counterId);

    const getActiveCountDown = () => {
        switch (activeCountDown) {
            case 'ChineseNewYear':
                return <Chinese />;
            case 'Birthday':
                return <Birthday />;
            case 'NewYear':
                return <NewYear />;
            default:
                return null;
        }
    };

    return (
        <div className='App'>
            {getActiveCountDown()}
            <button onClick={handleCountDownClick('NewYear')} className='nieuw'>
                New Year
            </button>
            <button onClick={handleCountDownClick('ChineseNewYear')} className='chinees'>
                Chinese New Year
            </button>
            <button onClick={handleCountDownClick('Birthday')} className='verjaardag'>
                My Birthday
            </button>
        </div>
    );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72636380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档