javascript 为什么split()函数只在一个条件下失败而在另一个条件下不失败

jljoyd4f  于 2023-01-19  发布在  Java
关注(0)|答案(1)|浏览(128)

背景

我正在将一个create-react-app应用程序转换为nextjs,我的大部分工作是确保现有组件可以为SSR工作。
我有一个组件抛出构建错误:

Error: text.split is not a function

对于此函数的最终条件:

function createRender(text, type, size, paragraphs, inline, nogap, url) {

    let renderObj;
    if (text) {
        // if text is an array, return a string of the array
        if (text instanceof Array) {
            text = text.join('');
        }
        if (type === "title") {
            renderObj = <h2>{text}</h2>
        } else if (paragraphs === true) {
            renderObj = text.split('\n').map((paragraph, index) => {
                if (paragraph !== "") {
                    return  <p>{paragraph}</p>
                }
            })
        } else {
            renderObj = text.split('\n').map((paragraph, index) => {
                if (paragraph !== "") {
                    return  <p >{paragraph}</p>
                }
            })
        }
    }

    return renderObj
}

问题

这个拆分请求(就我所见)与它前面的条件中的请求相同,不会抛出错误。
这不是在运行时传递非字符串时发生的错误,而是构建错误。
我遗漏了什么可能导致文本在这个条件下抛出这个错误?在我以前使用javascript的经验中,我只会在运行时得到一个错误,并且一个不是字符串的变量试图被拆分。
还有,为什么它没有在上面的条件中引起错误,使用完全相同的代码?如果我删除最后一个'else'条件,我就不会得到错误。

警告

忽略条件中的逻辑,我已经删除了一些细节,以使其以最小的形式重现。
我使用的是nextjs13和它的app文件夹,我是nextjs的新手,看到这是一个实验性的功能,所以我不确定是不是这个功能的外部因素导致了这个问题。

更新1

我发现,如果我在finalelse中添加一个已定义的条件,就不会抛出这个错误。

} else {
    renderObj = text.split('\n').map((paragraph, index) => {
        if (paragraph !== "") {
            return  <p >{paragraph}</p>
        }
    })
}

} else (any variable === anything) {
    renderObj = text.split('\n').map((paragraph, index) => {
        if (paragraph !== "") {
            return  <p >{paragraph}</p>
        }
    })
}

条件定义是任意的,我可以放置size === 'melon',它不再抛出错误。

9udxz4iz

9udxz4iz1#

我太习惯于客户端呈现,并且仍然使用这样的观点,即函数和变量只有在构建时出现错误代码时才会抛出错误。
然而,因为这个函数是为SSR构建的,它被传递了实际的真实的变量,并且抛出了一个错误,就像我在CSR上运行时所熟悉的那样。
所以问题是捕捉一个错误的变量,它应该是一个字符串,但实际上不是。

相关问题