在使用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

找到合适的风格

    1. 从@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;

然而,仅仅这样做会显示以下错误,因此需要添加设置才能应用样式。

スクリーンショット 2022-09-03 11.26.45.png

需要编写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;

请参考

 

广告
将在 10 秒后关闭
bannerAds