Javascript 在浏览器中运行expo应用程序时,为什么导出默认值会引发错误?

Javascript 在浏览器中运行expo应用程序时,为什么导出默认值会引发错误?,javascript,react-native,expo,Javascript,React Native,Expo,我有一个使用导出默认值的组件: export default CategoryCard = (props) => { const {name, color, onPress } = props return ( ..my code 因此import语句是import CategoryCard 当我尝试使用Expo客户端在浏览器中运行时,浏览器返回错误 “引用错误:未定义CategoryCard” 如果我改变 导出默认分类卡到导出常量分类卡 然后将import Cat

我有一个使用导出默认值的组件:

export default CategoryCard = (props) => {
    const {name, color, onPress } = props

    return (  ..my code 
因此import语句是
import CategoryCard

当我尝试使用Expo客户端在浏览器中运行时,浏览器返回错误 “引用错误:未定义CategoryCard”

如果我改变
导出默认分类卡
导出常量分类卡
然后将
import CategoryCard
更改为
import{CategoryCard}
,这样在浏览器中就可以正常工作了


我理解这两种说法之间的区别,在这里我并不过分担心,因为这是一个本机应用程序,最终不会在浏览器中运行——但我只是想了解一下这里发生了什么,以及为什么broswer不喜欢导出默认值。

如果您有什么东西允许您在不使用浏览器的情况下执行版本
const
(或
let
),则它的实现不正确。线路

export default CategoryCard = (props) => {
表示“将此值(箭头函数)分配给已存在的变量
CategoryCard
,并将该值导出为此模块的默认导出。”模块始终处于严格模式,因此,如果您没有对
CategoryCard
的任何位置进行声明,则这是一个引用错误。(如果没有严格模式,您可以通过分配给未声明的变量来创建全局变量,但这不是一个好主意™. :-) )

由于模块总是严格的,因此需要
const
let

export default const CategoryCard = (props) => {
// −−−−−−−−−−−−^^^^^
给出错误的浏览器是正确的,因为它是一个要分配给未声明标识符的引用错误(在严格模式下)


这并不是说您必须始终使用
export
来执行
const
let
函数
。如果不这样做,您可以将任意表达式的结果导出为默认导出。这是有效的代码,例如:

export default 6 * 7;
因此,如果您在别处声明了
CategoryCard
,您的导出将是有效的:

let CategoryCard;
export default CategoryCard = (props) => {

当然,我并不是建议这样做,只是指出它是有效的。:-

如果您有一些东西允许您在不使用
常量的情况下执行版本(或
let
),那么它的实现是错误的。线路

export default CategoryCard = (props) => {
表示“将此值(箭头函数)分配给已存在的变量
CategoryCard
,并将该值导出为此模块的默认导出。”模块始终处于严格模式,因此,如果您没有对
CategoryCard
的任何位置进行声明,则这是一个引用错误。(如果没有严格模式,您可以通过分配给未声明的变量来创建全局变量,但这不是一个好主意™. :-) )

由于模块总是严格的,因此需要
const
let

export default const CategoryCard = (props) => {
// −−−−−−−−−−−−^^^^^
给出错误的浏览器是正确的,因为它是一个要分配给未声明标识符的引用错误(在严格模式下)


这并不是说您必须始终使用
export
来执行
const
let
函数
。如果不这样做,您可以将任意表达式的结果导出为默认导出。这是有效的代码,例如:

export default 6 * 7;
因此,如果您在别处声明了
CategoryCard
,您的导出将是有效的:

let CategoryCard;
export default CategoryCard = (props) => {

当然,我并不是建议这样做,只是指出它是有效的。:-

这里有一些有用的答案:令人惊讶的是,任何环境都不会给你错误。:-)这里有一些有用的答案:令人惊讶的是,任何环境都不会给您带来错误。:-)