当前位置: 首页 > 知识库问答 >
问题:

react.js - 如何解决在Next.js中document未定义的问题?

莫宝
2024-04-17

你好想问一下,刚刚接触react,之前写的js在html上可以使用,但是换到这里显示document is not defined,如果在document.getElementById不能用的情况下还有什么办法能够通过id获取到元素?或者应该怎么修改才能正常获取呢?写的屎山如下,请大佬指教qaq

export default function ANIAdmire() {    let count = 0;  let flag = true;//判断素材状态  let img: document.getElementById("admire");  //就是这里出了问题,不是img未定义就是document未定义qwq  img.style.AnimationPlayState = "paused";//动画初始状态为停止  function myEndFunction() {  img.style.animation = null  } //点击后设置动画为空,保证每次点击动画位置为初始状态  img.addEventListener("click", function () {    if (count == 3) {      //每点击四次更换一次素材      count = 0;      if (flag) {        img.style.animation = "jump 0.7s linear 0s 1,gululu 0.7s linear 0s 1"//动画赋值        img.src =          "https://patchwiki.biligame.com/images/umamusume/2/20/o9e5yn4nvsm4lf8zon22bin9l7rrauk.png"        flag = false//更换素材        img.addEventListener("webkitAnimationEnd", myEndFunction)//动画播放完成后清空动画      } else {        img.style.animation = "jump 0.7s linear 0s 1,gululu 0.7s linear 0s 1" //动画赋值        img.src =          "https://patchwiki.biligame.com/images/umamusume/0/08/7u6ud327zarqitc9i49ftudknxzw674.png"        flag = true //更换素材        img.addEventListener("webkitAnimationEnd", myEndFunction) //动画播放完成后清空动画      }    } else {      count++    }  })}

1

共有3个答案

慕鸿波
2024-04-17
let img: document.getElementById("admire");// 这里的:应该是=吧

你的函数名不需要首字母大写,因为这不是一个组件,它只是实现了一个点击动画的逻辑。将这个逻辑整理之后放到<image id="admire" />出现的组件中就好了。通过useRef关联到这个dom,然后在useEffect中给这个dom添加事件监听,来实现点击动画的效果。

欧旻
2024-04-17

浏览器里才能执行的代码,放到单独的 client 组件里,用 'use client' 标记出来。

鲁景山
2024-04-17

建议先看看文档 https://react.dev/learn/referencing-values-with-refs

 类似资料:
  • 问题内容: 在我的 Next.js 应用中,我似乎无法访问: 未处理的拒绝(ReferenceError):未定义窗口 问题答案: 将代码从移至: 在Next.js中,仅在可使用其他浏览器特定API 的客户端上执行。从Next.js Wiki : Next.js是通用的,这意味着它首先在服务器端执行代码,然后在客户端执行代码。window对象仅在客户端存在,因此,如果您绝对需要在某些React组件

  • 我正在尝试重建一个使用Firebase云函数和Firestore的web应用程序示例。部署函数时,出现以下错误: 这是功能: 我只是尝试部署函数来测试它。并且已经在网上搜索过类似的问题,但是找不到任何其他与我的问题相匹配的帖子。

  • 这是因为一些只兼容客户端的脚本被打包进了服务端的执行脚本中去。 对于只适合在客户端运行的脚本,需要通过使用 process.client 变量来判断导入。 举个例子, 在你的 .vue 文件中: if (process.client) { require('external_library') }

  • 我有两个文件,一个是'a.js'在压缩文件夹中,另一个是b.js在压缩文件夹中的一个文件夹b中,我正在使用Express的路由。我是一个初学者,不知道如何解决这个错误,它意味着什么。我想在a.js中使用b文件。A.JS 这是B.JS 这是错误 This.Stack.Push(层);^ TypeError:无法读取function.route(C:\users\palwasha\downloads\

  • 问题内容: 工具:Reactjs 0.14.0 Vanilla Flux 我需要唯一标识符的原因有两个: 儿童和解 跟踪点击了哪个孩子 因此,假设我有一个看起来像这样的消息列表: 现在,我使用“ Array.prototype.map()” 在所有者组件内部创建“ ownee” 组件() 但是this.props.key在MessageListItem中是未定义的,即使我知道在传递时已定义的事实也

  • Examples Styled components custom document Google AMP 解释 在服务端呈现 初始化服务端时添加文档标记元素 通常实现服务端渲染会使用一些 css-in-js 库,如styled-components, glamorous 或 emotion。styled-jsx是 Next.js 自带默认使用的 css-in-js 库 Next.js会自动定义文