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) => {
当然,我并不是建议这样做,只是指出它是有效的。:-这里有一些有用的答案:令人惊讶的是,任何环境都不会给你错误。:-)这里有一些有用的答案:令人惊讶的是,任何环境都不会给您带来错误。:-)