问题描述
嗨,我在学习NextJs,发现了这个问题
此模块有效
const GlobalStyles = () => (
<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>
);
export default GlobalStyles;
不是
const GlobalStyles = () => {
<>
<Global
styles={css`
body {
color: #000000;
}
`}
/>
</>
};
export default GlobalStyles;
真的是菜鸟,谁能解释?
解决方法
第一个隐式返回jsx
元素(无需指定return
)。
第二个语句缺少return
语句。
说明:在JavaScript中,当您只想从函数返回值时,如果使用箭头函数,则可以省略花括号({}
),但是如果您使用花括号,您实际上需要写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;
}
`}
/>
</>
);
}
您的第二个代码块不返回任何内容,因此不呈现任何内容是正确的行为。
,这是一个很好的问题!每个人都不关心为什么要使用它?
顾名思义,IIFE是在定义后立即执行的函数-无需显式调用它们。
通常,这是定义和执行(稍后)函数的方式:
function myFunction() {
// ...
}
myFunction();
但是,如果要在定义函数后立即执行该函数,则必须将整个声明包装在括号中(以将其转换为表达式),并通过添加两个以上的括号(传递该函数可能采用的任何参数)来执行)。
通过这种方式:
( function myFunction(/* arguments */) {
// ...
}(/* arguments */) );
在TypeScript中,使用花括号将IIFE换行,将所需的所有逻辑放入其中(if / else,switch,三元运算符等),然后返回要渲染的内容。例如,以下是使用IIFE呈现保存/编辑按钮的逻辑的样子:
( (/* arguments */) => {
// ...
} ) (/* arguments */);
我希望我的回答能帮助您理解=>
运算符。