javascript 在next.js中呈现排序数组时出错

8tntrjer  于 2023-05-27  发布在  Java
关注(0)|答案(3)|浏览(133)

我试图根据它们的值(从最高到最低)呈现一个项目数组。一切正常,但我得到一个错误说Error: Text content does not match server-rendered HTML.每当我运行代码。下面是用于对数组items进行排序并根据其值Map出每个项的代码。我不知道如何避免这个错误。

const items = [
    {id: 1, title: 'Topic 1', value: 2},
    {id: 2, title: 'Topic 2', value: 5},
    {id: 3, title: 'Topic 3', value: 1},
    {id: 4, title: 'Topic 4', value: 4},
    {id: 5, title: 'Topic 5', value: 3},
]

const App = () => {
    <div className="flex flex-col gap-4 w-full p-6 items-center">

    {items.sort((a, b) => b.value - a.value).map((item, index) => (
        <div 
            className="flex gap-2 px-4 items-center h-10 w-full rounded-md text-lg bg-[#ffd700]"
            key={index}
        >
            <div>
                {item.title}
                {item.value}
            </div>
            /5
        </div>
     ))}

    </div>
}
vlf7wbxs

vlf7wbxs1#

未来的读者;这个错误可以简单地通过在main函数中包含你试图排序的任何东西的列表来修复。
例如:

const App = () => {
    const items = [
        {id: 1, title: 'Topic 1', value: 2},
        {id: 2, title: 'Topic 2', value: 5},
        {id: 3, title: 'Topic 3', value: 1},
        {id: 4, title: 'Topic 4', value: 4},
        {id: 5, title: 'Topic 5', value: 3},
    ]

    <div className="flex flex-col gap-4 w-full p-6 items-center">

    {items.sort((a, b) => b.value - a.value).map((item, index) => (
        <div 
            className="flex gap-2 px-4 items-center h-10 w-full rounded-md text-lg bg-[#ffd700]"
            key={index}
        >
            <div>
                {item.title}
                {item.value}
            </div>
            /5
        </div>
     ))}

    </div>
}
vltsax25

vltsax252#

问题是.sort()改变了原始数组。您可以通过克隆数组并对其进行排序来修复此问题。

wsewodh2

wsewodh23#

我认为这个错误是由于在.map函数中使用了(而不是{.map函数的正确语法是:

items.map((item, index) => {
  return <>...</>
})

您的示例将适用于以下内容:

const items = [
    {id: 1, title: 'Topic 1', value: 2},
    {id: 2, title: 'Topic 2', value: 5},
    {id: 3, title: 'Topic 3', value: 1},
    {id: 4, title: 'Topic 4', value: 4},
    {id: 5, title: 'Topic 5', value: 3},
]

<div className="flex flex-col gap-4 w-full p-6 items-center">

    {items.sort((a, b) => b.value - a.value).map((item, index) => {
        <div 
            className="flex gap-2 px-4 items-center h-10 w-full rounded-md text-lg bg-[#ffd700]"
            key={index}
        >
            <div>
                {item.title}
                {item.value}
            </div>
            /5
        </div>
     })}

</div>

相关问题