与 Fat Arrow (=>) 函数混淆
Confused with Fat Arrow (=>) function
嗨,我正在学习 NextJs 并发现了这个问题
这个模块有效
const GlobalStyles = () => (
<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>
);
export default GlobalStyles;
这不是
const GlobalStyles = () => {
<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>
};
export default GlobalStyles;
我真的很菜鸟谁能解释一下?
第一个 return 是隐式的 jsx
元素(无需指定 return
)。
第二个缺少 return
语句。
说明:在 JavaScript 中,当您使用箭头函数时,如果您唯一想做的是 return 来自的值,则可以省略大括号 ({}
)函数,但是如果你确实使用花括号,你需要实际写 return
到 return 任何你想要的 return.
使用方括号 {}
时,您声明的箭头函数需要 return
语句。
通过括号定义箭头函数,你只允许有一个语句(你的定义),默认返回。
如果您像这样添加 return
,您的第二个示例将起作用:
const GlobalStyles = () => {
return (<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>);
};
export default GlobalStyles;
这个问题的答案很简单。
const GlobalStyles = () => (
<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>
);
这相当于
const GlobalStyles = () => {
return (
<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>
);
}
您的第二个代码块没有 return 任何内容,因此不呈现任何内容是正确的行为。
真是个好问题!每个人都不关心它为什么要用?
顾名思义,IIFE 是定义后立即执行的函数——无需显式调用它们。
通常,这是您定义和执行(稍后)函数的方式:
function myFunction() {
// ...
}
myFunction();
但是如果你想在函数定义后立即执行它,你必须将整个声明包裹在括号中(将其转换为表达式)并通过添加两个括号来执行它(将任何参数传递给函数可能需要)。
要么这样:
( function myFunction(/* arguments */) {
// ...
}(/* arguments */) );
在 TypeScript 中,您使用花括号包裹 IIFE,将所有您想要的逻辑放入其中(if/else、开关、三元运算符等),以及 return 任何您想要的渲染。例如,下面是使用 IIFE 呈现 save/edit 按钮的逻辑:
( (/* arguments */) => {
// ...
} ) (/* arguments */);
希望我的回答能帮助您理解=>
运算符。
嗨,我正在学习 NextJs 并发现了这个问题
这个模块有效
const GlobalStyles = () => (
<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>
);
export default GlobalStyles;
这不是
const GlobalStyles = () => {
<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>
};
export default GlobalStyles;
我真的很菜鸟谁能解释一下?
第一个 return 是隐式的 jsx
元素(无需指定 return
)。
第二个缺少 return
语句。
说明:在 JavaScript 中,当您使用箭头函数时,如果您唯一想做的是 return 来自的值,则可以省略大括号 ({}
)函数,但是如果你确实使用花括号,你需要实际写 return
到 return 任何你想要的 return.
使用方括号 {}
时,您声明的箭头函数需要 return
语句。
通过括号定义箭头函数,你只允许有一个语句(你的定义),默认返回。
如果您像这样添加 return
,您的第二个示例将起作用:
const GlobalStyles = () => {
return (<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>);
};
export default GlobalStyles;
这个问题的答案很简单。
const GlobalStyles = () => (
<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>
);
这相当于
const GlobalStyles = () => {
return (
<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>
);
}
您的第二个代码块没有 return 任何内容,因此不呈现任何内容是正确的行为。
真是个好问题!每个人都不关心它为什么要用?
顾名思义,IIFE 是定义后立即执行的函数——无需显式调用它们。
通常,这是您定义和执行(稍后)函数的方式:
function myFunction() {
// ...
}
myFunction();
但是如果你想在函数定义后立即执行它,你必须将整个声明包裹在括号中(将其转换为表达式)并通过添加两个括号来执行它(将任何参数传递给函数可能需要)。
要么这样:
( function myFunction(/* arguments */) {
// ...
}(/* arguments */) );
在 TypeScript 中,您使用花括号包裹 IIFE,将所有您想要的逻辑放入其中(if/else、开关、三元运算符等),以及 return 任何您想要的渲染。例如,下面是使用 IIFE 呈现 save/edit 按钮的逻辑:
( (/* arguments */) => {
// ...
} ) (/* arguments */);
希望我的回答能帮助您理解=>
运算符。