在使用Create React App创建的React环境中导入Emotion的步骤是什么?
Emotion是CSS in JS的框架。
以下是将Emotion引入Create React App创建的React环境的步骤摘要。
执行Create React App
首先执行以下命令,设置React环境。
npx create-react-app プロジェクト名 --template typescript
情感补充
按照以下公式,在命令中添加Emotion。
根据以下公式,在命令中加入Emotion。
npm i @emotion/react
找到合适的风格
-
- 从@emotion/react导入CSS
编写所需样式
应用所编写的样式
import React from 'react';
import logo from './logo.svg';
import './App.css';
import { css } from '@emotion/react'; // 1
// 2
const link = css`
background-color: red;
`
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.tsx</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
css={link} // 3
>
Learn React
</a>
</header>
</div>
);
}
export default App;
然而,仅仅这样做会显示以下错误,因此需要添加设置才能应用样式。

需要编写JSX Pragma声明。
JSX Pragma 的描述
根据公式,在需要使用Emotion的文件中加入/** @jsxImportSource @emotion/react */这段描述。
/** @jsxImportSource @emotion/react */
import React from 'react';
import logo from './logo.svg';
import './App.css';
import { css } from '@emotion/react';
省略
您可以使用这个功能通过Emotion来调整风格。
如果每次都要写JSX Pragma很麻烦的话
通过添加CRACO,可以省去许多麻烦。
CRACO是一个用于自定义React环境设置的库。
首先安装CRACO。
npm i @craco/craco
接下来,在项目根目录下创建 craco.config.js 文件。
module.exports = {
babel: {
presets: [
[
"@babel/preset-react",
{ runtime: "automatic", importSource: "@emotion/react" },
],
],
plugins: ["@emotion/babel-plugin"],
},
};
进一步将package.json的scripts更改如下:
通过这个更改,您将能够通过CRACO进行构建等操作。
"scripts": {
"start": "craco start",
"build": "craco build",
"test": "craco test",
}
在最后,我们需要向tsconfig.json文件的compilerOptions下添加以下内容。
"compilerOptions": {
"jsxImportSource": "@emotion/react"
}
不需要在上面添加/** @jsxImportSource @emotion/react */的情况下,也可以使用Emotion来应用样式。
import React from 'react';
import logo from './logo.svg';
import './App.css';
import { css } from '@emotion/react';
const link = css`
background-color: red;
`
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.tsx</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
css={link}
>
Learn React
</a>
</header>
</div>
);
}
export default App;
请参考