【发布时间】:2021-09-12 04:07:33
【问题描述】:
在使用 NextJS 进行项目时,我遇到了一个部分,其中我制作了一个名为
app_buttonGray 看起来像这样:
// /components/app_buttonGray.js
export default function AppButtonGray({ size, children }){
return(
<button className={`flex w-${size ? size : "36"} mt-2 p-1 rounded-md bg-gray-500 hover:bg-gray-800 shadow-lg justify-center`}>
{children}
</button>
)
}
稍后在我的页面中,我想创建多个按钮,但每个按钮都有不同的用途
所以我想像这样实现onClick:
<AppButtonGray size="48" onClick={ () => alert(1)}>New project</AppButtonGray>
<AppButtonGray size="48" onClick={ () => alert(2)}>Open project</AppButtonGray>
但这似乎不起作用......
经过多次尝试后,我想出了使它起作用的修改:
// /components/app_buttonGray.js
export default function AppButtonGray({ size, onClick, children }){
return(
<button onClick={onClick} className={`flex w-${size ? size : "36"} mt-2 p-1 rounded-md bg-gray-500 hover:bg-gray-800 shadow-lg justify-center`}>
{children}
</button>
)
}
所以我必须通过参数传递onClick,然后在组件内部调用它...
这是实现这项工作的正确方法吗?如果没有,那么正确的方法是什么?谢谢
【问题讨论】:
-
仅供参考,您的顺风动态宽度类名将在构建时被删除,因为您不能使用字符串连接 - 这是我几天前发布的更详细的解释和修复 - stackoverflow.com/a/68029107/15304814
-
@SeanW 谢谢。我学到了很多。我认为在我的代码中情况并非如此......对于我在您发布的链接中阅读的内容,我应该
not use string concatenation to create class names,而不是我应该`动态选择一个完整的类名`这是我的情况 -
是的,在您的情况下,您可以将“大小”设为整个顺风类名,而不仅仅是宽度数字 - 即 lg = "w-36" md = "w-30" 等,并在您的类类名={
${size} flex}。最后,由于 size 属性是可选的,因此您应该将 defaultProps 中的默认尺寸设置为“w-36”。 AppButtonGray.defaultProps = { size: 'w-36' } reactjs.org/docs/…
标签: javascript reactjs react-hooks onclick next.js