此问题已在此处有答案:
Next.js - having trouble setting up an onClick handler(1个答案)
5天前关闭。
这篇文章是编辑并提交审查5天前.
我刚开始学习Next.js,想尝试一些简单的东西。我想在我的页面上显示一个按钮,当点击时,会在控制台中显示“点击”。
这是我添加到page.js中的默认模板中的代码,该模板是在运行npx create-next-app时生成的。
export default function Home() {
const handleClick() => {
console.log('clicked');
}
return (
<div>
<button onClick={handleClick} >Click me</button>
</div>
)
}
当我试着运行这个的时候它抛出了错误
到目前为止我试过的修复方法…。
return (
<div>
<button onClick={() => handleClick} >Click me</button>
</div>
)
这抛出了一个错误
error Error: Event handlers cannot be passed to Client Component props.
<button onClick={function} children=...>
^^^^^^^^^^
If you need interactivity, consider converting part of
this to a Client Component.
at stringify (<anonymous>)
digest: "1701345382"
null
我也试过
return (
<div>
<button onClick={(handleClick} >Click me</button>
</div>
)
它也抛出了同样的错误
5条答案
按热度按时间v6ylcynt1#
onClick
属性需要一个函数,所以...这样,您就传递了一个不带参数的匿名函数,该函数调用不带参数的
handleClick
。您还可以:
这样,您就将event属性传递给了
handleClick
函数。或者
这样,您就可以将每个参数传递给
handleClick
函数。这和写作是一样的最后,当你写
handleClick()
不是一个函数,它是从handleClick
函数返回的。wwwo4jvm2#
接下来js默认在服务器端呈现页面。但事件发生在浏览器中。因此,在nextjs文件的顶部,提到“使用客户端”,它会将组件转换为客户端。
请参阅Next js文档:https://nextjs.org/docs/getting-started/react-essentials#the-use-client-directive
zaqlnxep3#
我在做一些React时学到的是:(如果我错了请纠正)
如果我们使用箭头函数传递onclick处理程序,那么您将不得不调用
handleClick
函数。尝试将其更改为:
<button onClick={() => handleClick()}> Click me </button>
(we需要
()
后的函数在这里)如果我们希望在
handleClick
函数中传递一些参数,则主要使用此语法。否则,我们也可以这样做:
<button onClick={handleClick}> Click me </button>
(we在这里不需要
()
函数之后)如果我们做了:
<button onClick={handleClick()}> Click me </button>
那么
handleClick
函数将在页面上呈现的同时执行这行代码时运行而无需单击按钮。就像发生在你身上一样!希望有帮助:D
5w9g7ksd4#
您是否尝试过将该组件转换为客户端组件,并在文件顶部添加
'use client';
?Because all components in Next by default are server components,因此对于客户端交互,您需要使用“使用客户端”。u0njafvf5#
试试用这个