javascript - NextJs Link 组件包装图像在映射数组时会导致错误,除非在顶级页面组件中使用

标签 javascript next.js

我正在尝试利用 NextJs 的 <Link />标签来包装 NextJs <Image />在我的应用程序中,映射数据数组。如果我放置 <Link />在顶级页面组件中,一切都运行良好并正确呈现。但是,如果我尝试将其抽象为子组件,然后将子组件嵌入到页面组件中,我会收到错误消息,告诉我 Error: Multiple children were passed to <Link> with 链接 of/测试 but only one child is supported https://nextjs.org/docs/messages/link-multiple-children除非我删除源代码中的所有换行符。

例如,这有效

// pages/index.js
import Link from 'next/link';
import Image from 'next/image';

export default function Home({links}) {
    return (
        <>
            <div id="container">
                <main>
                    {links.map(link => {
                        return <Link key={link.link} href={link.link}>
                            <a><Image src={link.imageUrl} width={400} height={400}/></a>
                        </Link>;
                    })
                    }
                </main>
            </div>

        </>
    );
}

export async function getStaticProps() {
    const response = await fetch('http://localhost:3000/api/links');
    const links = await response.json();
    return {
        props: {
            links
        },
    }
}

这也有效

// pages/index.js
import Links from '../components/Links';

export default function Home({links}) {
    return (
        <>
            <div id="container">
                <main>
                     <Links links={links}/>
                </main>
            </div>

        </>
    );
}

export async function getStaticProps() {
    const response = await fetch('http://localhost:3000/api/links');
    const links = await response.json();
    return {
        props: {
            links
        },
    }
}
// components/Links.js
import Image from 'next/image';
import Link from 'next/link';

export default function Links({links}) {
    return links.map(link => {
            return <Link key={link.link} href={link.link}><a><Image src={link.imageUrl} width={400} height={400}/></a></Link>;
        },
    );
}

但是这失败了

// pages/index.js
import Links from '../components/Links';

export default function Home({links}) {
    return (
        <>
            <div id="container">
                <main>
                     <Links links={links}/>
                </main>
            </div>

        </>
    );
}

export async function getStaticProps() {
    const response = await fetch('http://localhost:3000/api/links');
    const links = await response.json();
    return {
        props: {
            links
        },
    }
}
// components/Links.js
import Image from 'next/image';
import Link from 'next/link';

export default function Links({links}) {
    return links.map(link => {
            return <Link key={link.link} href={link.link}>
                <a>
                    <Image src={link.imageUrl} width={400} height={400}/>
                </a>
            </Link>;
        },
    );
}

感谢任何帮助!

最佳答案

我正在使用nextjstailwindcss .
包裹时Image<></> ,当我将鼠标悬停在元素上并单击它时,我的鼠标没有变成一只小手。
当用 <a></a> 包裹时,即使使用 flex justify-center items-center,图像也不与其他元素对齐上Link (至少就我而言)。

这就是我的解决方案:

const iconSize=20;
<Link href="/">
      <div className="hover:cursor-pointer flex justify-center items-center">
            <Image
              src="/your_image.png"
              alt="clickable image"
              width={iconSize}
              height={iconSize}
            />
      </div>
</Link>

我的nextjs版本:

Next.js v12.2.3

关于javascript - NextJs Link 组件包装图像在映射数组时会导致错误,除非在顶级页面组件中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71214244/

相关文章:

javascript - Extjs3 组件层次结构 - 获取所有子组件

asp.net 中的 Javascript 与单选按钮列表

javascript - 如何使用几个 next.js 插件(typescript 和 stylus)

reactjs - 在 NextJS 中实现本地相似/不相似功能并使其在客户端路由之间持续存在

javascript - 通过带有 FOR 循环的 jQuery 收集分段数据

javascript - ECMAScript 2017 中的 CallExpression 与 NewExpression

reactjs - 如何将 AWS 与 Next.js 结合使用?

reactjs - 使用 chakra-ui 和 next.js 时,Object.fromEntries 不是函数错误

javascript - jQuery 数据表保留过滤器和搜索参数

javascript - 如何在成帧器运动中多次使用动画