Next.js 文本循环组件永远不会更新

Posted

技术标签:

【中文标题】Next.js 文本循环组件永远不会更新【英文标题】:Next.js text cycling component never updates 【发布时间】:2021-11-20 22:19:06 【问题描述】:

我正在尝试编写我认为是一个简单的组件:它需要一个字符串数组,并且每三秒组件的 div 中的文本更改为数组中的下一项,循环返回开始。

虽然控制台显示更改消息功能每三秒运行一次,但消息从未更改。我认为这是因为 useState 更新永远不会发生。为什么会这样,我该如何让它发挥作用?

// components/textCycle.js
import  useState, useEffect from 'react';

function TextCycle (  array  ) 
  const [ msg, setMsg ] = useState(0);

  useEffect(() =>  
    function changeMsg() 
      setMsg((msg > array.length) ? 0 : msg + 1);
    
    setInterval( changeMsg, 3000);
  , []);

  return (
    <div>
      array[msg] 
    </div>
  );
;

export default TextCycle;

【问题讨论】:

【参考方案1】:
// components/textCycle.js
import  useState, useEffect from 'react';

function TextCycle (  array  ) 
  const [msg, setMsg] = useState(0);
function changeMsg() 
    setMsg((msg > array.length - 2) ? 0 : msg + 1);


useEffect(() => 
    setTimeout(changeMsg, 1000);
, [msg]);

return (
    <div>
        array[msg]
    </div>
);
;

export default TextCycle;

【讨论】:

以上是关于Next.js 文本循环组件永远不会更新的主要内容,如果未能解决你的问题,请参考以下文章

使用 Next Js Link 时更新 React 类组件

Next.Js 图像组件不会在 localhost 上加载图像

当父组件在 Next.js 应用程序中更新其道具时重新渲染 React 子组件

如何在 Next.js 中设置全局上下文而不会出现“文本内容不匹配”错误?

next.js socket.io 使用效果不更新套接字消息

Next.js/React 在组件中生成随机值时发出警告