next.js 错误:react__WEBPACK_IMPORTED_MODULE_0__.useState不是函数或其返回值不可迭代

xqk2d5yq  于 2022-11-23  发布在  React
关注(0)|答案(2)|浏览(482)

我在Next.js 13中编程时遇到了这个问题。我真的很感激任何帮助或建议=),以下是文件:

键入文本.tsx

import React from "react";

export function useTypedText(text: string, speed: number, delayTime?: number) {
  const [textState, setTextState] = React.useState("")
  const chars = text.split("")
  let interval = speed

  if(textState.length === 0 && delayTime)
    interval = speed + delayTime

  React.useEffect(() => {
    const timer = setTimeout(() => {
      setTextState((prevText) => {
        if (prevText.length !== chars.length) {
          const newText = prevText.concat(chars[prevText.length])
          return newText
        }
        return prevText
      })
    }, interval)
    return () => clearTimeout(timer)
  })

  return textState
}

主标题.tsx:

import React from 'react';
import { useTypedText }  from '../typingtext';

export function VMainHeader() {
  return (
    <div>
      <h1>
        {useTypedText("Hello everyone!", 50)}
        <br/>
        {useTypedText("I'm Diego.", 50, 200)}
      </h1>
      <h2>
        {useTypedText("Welcome", 30, 350)}
      </h2>
    </div>
  )
}

首页.tsx

import React from "react"
import { VMainHeader } from "./mainheader"
export default function VHome(){
  return(
    <div>
      <VMainHeader />
    </div>
  )
}

我期待着知道发生了什么,因为我已经尝试与

import { useState, useEffect } from "react";

在typingtext.tsx文件中,但它不起作用

8cdiaqws

8cdiaqws1#

我假设你尝试创建一个自定义钩子useTypedText。不要在return中使用。你可能想把它改为一个组件,把它重命名为TypedText,并且你至少需要把状态 Package 在framgent中。

return <>{textState}</>
hc2pp10m

hc2pp10m2#

好的,我已经修复了这个错误,所以我现在写这个来帮助像我这样的人,因为我认为这是Next.js 13或idk的一个新特性,我是Next xD中的noob。
当我在mainheader.tsx文件的顶部写入**“使用客户端”**时,它对我很有效:

"use client"
import React from 'react';
import { useTypedText }  from '../typingtext';

export function VMainHeader() {
  return (
    <div>
      <h1>
        {useTypedText("Hello everyone!", 50)}
        <br/>
        {useTypedText("I'm Diego.", 50, 200)}
      </h1>
      <h2>
        {useTypedText("Welcome", 30, 350)}
      </h2>
    </div>
  )
}

非常感谢那些试图帮助我的人〈3。

相关问题