这是我的代码,我在 Navbar.jsx 中调用 setShowCart(true) 函数时遇到错误。我不明白如何解决这个问题。
import React from 'react'
import Link from 'next/link';
import {AiOutlineShopping} from 'react-icons/ai';
import { Cart } from '.';
const Navbar = ({ showCart, setShowCart }) => {
return (
<div className='navbar-container'>
<p className='logo'>
<Link href="/">JSM headphones</Link>
</p>
<button type="button" className="cart-icon" onClick={() => setShowCart(true)}>
<AiOutlineShopping/>
<span className='cart-item-qty'>1</span>
</button>
{showCart && <Cart />}
</div>
)
}
export default Navbar;
import React from 'react'
import Head from 'next/head';
import Navbar from './Navbar';
import Footer from './Footer';
const Layout = ({children}) => {
return (
<div className='layout'>
<Head>
<title>E-commerce Store</title>
</Head>
<header>
<Navbar/>
</header>
<main className='main-container'>
{children}
</main>
<footer>
<Footer/>
</footer>
</div>
)
}
export default Layout
我的错误是 Navbar.jsx 函数的错误。任何人都可以建议我如何解决错误吗?错误如下截图所示
Unhandled Runtime Error
Error: Event handlers cannot be passed to Client Component props.
<button type="button" className=... onClick={function} children=...>
^^^^^^^^^^
If you need interactivity, consider converting part of this to a Client Component.
我阅读了您的代码,发现
Layout
组件中有错误。
您需要将
setShowCard
道具传递给 Navbar
。
const Layout = ({children}) => {
return (
<div className='layout'>
<Head>
<title>E-commerce Store</title>
</Head>
<header>
{/* <Navbar/> */}
<Navbar showCart={showCart} setShowCart={setShowCart} />
</header>
<main className='main-container'>
{children}
</main>
<footer>
<Footer/>
</footer>
</div>
)
}
您需要将
showCart
和 setShowCart
定义为 state
或从父级接收为 props
。
第二种解决方案是使用
Navbar
组件的默认 props。
import React from 'react'
import Link from 'next/link';
import {AiOutlineShopping} from 'react-icons/ai';
import { Cart } from '.';
import PropTypes from 'prop-types';
const Navbar = ({ showCart, setShowCart }) => {
return (
<div className='navbar-container'>
<p className='logo'>
<Link href="/">JSM headphones</Link>
</p>
<button type="button" className="cart-icon" onClick={() => setShowCart(true)}>
<AiOutlineShopping/>
<span className='cart-item-qty'>1</span>
</button>
{showCart && <Cart />}
</div>
)
}
Navbar.propTypes = {
showCart: PropTypes.bool.isRequired,
setShowCart: PropTypes.func.isRequired
}
Navbar.defaultProps = {
showCart: false,
setShowCart: () => {}
}
export default Navbar;