【问题标题】:JavaScript function syntax in Next.js / JSX?Next.js / JSX 中的 JavaScript 函数语法?
【发布时间】:2020-09-06 16:23:36
【问题描述】:

我即将创建一个可以选择尺寸的功能。当您仅将 JavaScript 与 HTML 一起使用时,它就可以工作。我的 JavaScript 函数语法是否正确?因为我从 Next.js 收到一个错误。

Here 是我从 Next.js 收到的错误消息。

import React from "react";
const ChangeSize = () => {
  const sizes = document.querySelectorAll(".size");
  function changeSize() {
    sizes.forEach((size) => size.classList.remove("active"));
    this.classList.add("active");
  }

  sizes.forEach((size) => size.addEventListener("click", changeSize));

  return (
    <div className='size-container'>
      <h3 className='title'>size</h3>
      <div className='sizes'>
        <span className='size'>7</span>
        <span className='size'>8</span>
        <span className='size active'>9</span>
        <span className='size'>10</span>
        <span className='size'>11</span>
      </div>
    </div>
  );
};

export default ChangeSize;

【问题讨论】:

  • 嘿 Morten,您正在使用功能性反应组件,因此“this”关键字可能不起作用。您可以像添加一样删除类。
  • 应该是size.classList.add(...)?

标签: javascript reactjs next.js jsx


【解决方案1】:

通常您不会使用 JavaScript DOM API 在 React 中完成此类任务。函数和 JSX 在 React Function 组件中类似于这样:

const SizeSwitcher = () => { 
  const [activeLink, setActiveLink] = React.useState(9); // 9 was default in example

  return (
    <div className='size-container'>
      <h3 className='title'>size</h3>
      <div className='sizes'>
        <span onClick={() => setActiveLink(7)} className={`size ${activeLink === 7 ? 'active' : ''}`}>7</span>
        <span onClick={() => setActiveLink(8)} className={`size ${activeLink === 8 ? 'active' : ''}`}>8</span>
        <span onClick={() => setActiveLink(9)} className={`size ${activeLink === 9 ? 'active' : ''}`}>9</span>
        <span onClick={() => setActiveLink(10)} className={`size ${activeLink === 10 ? 'active' : ''}`}>10</span>
        <span onClick={() => setActiveLink(11)} className={`size ${activeLink === 11 ? 'active' : ''}`}>11</span>
      </div>
    </div>
  );
};

export default SizeSwitcher;

您可以声明一些状态,然后使用该状态来确定活动类是否应该存在。下一步可能是弄清楚如何减少示例中的代码重复。希望这会有所帮助!

编辑 - 哦,是的,如果您使用 Next.js,您可以省略顶部的 React 导入。由 Next 自动处理。

【讨论】:

  • 我什至会添加一个循环,因为span 重复在这里很讨厌
猜你喜欢
  • 2015-05-18
  • 2023-02-08
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
相关资源
最近更新 更多