我是比较新的react 和NextJS.我已经花了整整8个小时和相当多的研究试图弄清楚这一点,但没有运气!

我正在try 设置一个组件,它从数组中随机选取一个单词,淡入,然后在一段延迟后淡出,淡入一个新词.

在整理了我自己的几个失败的解决方案后,我找到了一个教程,并try 了他们的代码(经过一些修改,将其从TS转换到JS),但它仍然不起作用.

我可以很容易地让文本在计时器上更改,但不能更改褪色.

有什么主意吗?

使用基于StackBlitz的基本NextJS设置构建的NextJS 13

Index.js

import { useEffect, useState } from 'react';
import styles from './Index.module.css';

const FADE_INTERVAL_MS = 2000;
const WORD_CHANGE_INTERVAL_MS = FADE_INTERVAL_MS * 2;
const WORDS_TO_ANIMATE = [
  'Hello',
  'Ciao',
  'Jambo',
  'Bonjour',
  'Salut',
  'Hola',
  'Nǐ hǎo',
  'Hallo',
  'Hej',
  '??',
];

export default function AnimatedText() {
  const [fadeProp, setFadeProp] = useState('fadeout');
  const [wordOrder, setWordOrder] = useState(0);

  useEffect(() => {
    const fadeTimeout = setInterval(() => {
      fadeProp === 'fadein' ? setFadeProp('fadeout') : setFadeProp('fadein');
    }, FADE_INTERVAL_MS);

    return () => clearInterval(fadeTimeout);
  }, [fadeProp]);

  useEffect(() => {
    const wordTimeout = setInterval(() => {
      setWordOrder(
        (prevWordOrder) => (prevWordOrder + 1) % WORDS_TO_ANIMATE.length
      );
    }, WORD_CHANGE_INTERVAL_MS);

    return () => clearInterval(wordTimeout);
  }, []);

  return (
    <h2 className={styles.white}>
      <span className={`styles.${fadeProp}`}>
        {WORDS_TO_ANIMATE[wordOrder]}
      </span>
      , I'm bleh.
    </h2>
  );
}

Index.module.css

.fadein {
  animation: fadein 0.3s;
  -moz-animation: fadein 0.3s;
  -webkit-animation: fadein 0.3s;
  -o-animation: fadein 0.3s;
}

.fadein {
  animation: fadeout 0.3s;
  -moz-animation: fadeout 0.3s;
  -webkit-animation: fadeout 0.3s;
  -o-animation: fadeout 0.3s;
}

.white {
  color: silver;
}

@keyframes fadein {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}

@keyframes fadeout {
  0% {
    opacity: 1;
    color: blue;
  }
  100% {
    opacity: 0;
    color: red;
  }
}

推荐答案

你走在正确的道路上.但你需要解决一些问题.而不是做:

 <span className={`styles.${fadeProp}`}>
      {WORDS_TO_ANIMATE[wordOrder]}
 </span>

试一试吧

 <span className={fadeProp}>
      {WORDS_TO_ANIMATE[wordOrder]}
 </span>

原因是您没有正确设置您的css类名 Select 器.我想在那之后你可以为了你的方便而调整它.

-编辑

此外,您还需要创建一个.css文件,而不是.module.css.我认为原因是因为.module.css是汇编的,不能是动态的.

styles目录中创建一个global.css文件.将其导入您的_app.js入口点,在pages目录内.

如果你没有它,它看起来是这样的: _app.js

import '../styles/globals.css';
 
// This default export is required in a new `pages/_app.js` file.
export default function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />;
}

使用globals.css不是最好的 Select ,但你可以在以后改进它.请查找有关设置Nextjs应用程序样式的更多信息here.

Reactjs相关问答推荐

无法在jest中发布行动

包装组件可以避免子组件重新渲染.?

Reactjs中的chartjs和reaction-chartjs-2的问题

有没有办法将在服务器端全局获取的一些数据传递到Next&>13应用程序目录中的客户端组件?

更改购物车中的产品数量后,PayPal Reaction/Next JS按钮未更新

如何访问子集合中的文档?

REACTION 18功能组件正在开发中的S

左边框不在图表中显示

如何获取用户在 GooglePlacesAutocomplete 中输入的文本?

Chart.js如何go 除边框

未处理的拒绝 (TypeError):无法读取未定义的属性(读取协议)

每次状态更改时都会提交react 表单

如何修改 react/jsx-no-useless-fragment 规则以允许 <>{children}

Next.js i18n 路由不适用于动态路由

使用dayjs时如何在输入类型日期时间本地字段中设置默认值?

React Native Realm 应用程序在发布构建后崩溃

如何向 surveyjs 调查添加多个结尾?

如何使用react 路由将 url 参数限制为一组特定的值?

ReactJS:按钮启用禁用更改 colored颜色

为什么我从另一个组件收到错误?