reactjs CSS情感库-使用css prop时获取css prop错误

wqlqzqxt  于 2022-12-03  发布在  React
关注(0)|答案(7)|浏览(172)

这是我的密码

import { css, jsx } from '@emotion/core'
       
return (
       <>
       <img css={css`height: 200px; height: 200px;`} fluid={image.sharp.fluid} />
       <List>
           <li>Our Clients</li>
           <li>What We Do</li>
           <li>Contact</li>
       </List>
       </>
   )

这是我得到的错误
您试图将css函数返回的对象字符串化。它不应该直接使用(例如作为className prop的值),而是交给情感处理(例如作为css prop的值)。
这个错误似乎是在告诉我,我需要做我已经在做的事情?或者我在这里遗漏了什么。

wdebmtf2

wdebmtf21#

只是想指出我有这个问题,并添加了这个修复了我的错误:

/** @jsx jsx */
import { jsx } from '@emotion/core';

为了澄清,您必须在文件顶部添加/** @jsx jsx */;

jvidinwx

jvidinwx2#

作为detailed in the Emotion documentation,使用css prop需要将React替换为jsx作为JSX元素的目标函数(称为“pragma”),这将使Emotion能够拦截css prop并将其转换为用于React的className prop。
例如:

<p>Hi</p>

// Becomes the following by default:
React.createElement("p", {}, "Hi")

// But with the `jsx` pragma, it becomes:
jsx("p", {}, "Hi")

有两种方法可以实现这一点。你只需要选择一种。如果你能够在你的应用程序中配置巴别塔,第一种是推荐的方法,但任何一种都可以:
1.安装Babel插件,将jsx配置为应用中所有代码的默认处理程序
最直接的方法是将相关的巴别塔预设添加到巴别塔配置中,如下所示:

// Option 1A — Good
// Add @emotion/babel-preset-css-prop to your dev dependencies, then
// add the preset to your .babelrc configuration:

{
  "presets": ["@emotion/babel-preset-css-prop"]
}

不过,如果您能够做到这一点,我建议您配置babel-plugin-emotion,它包括css prop配置以及其他特性,如缩小、死代码消除和提升:

// Option 1B — Better
// Add babel-plugin-emotion to your dev dependencies, then add
// the plugin to your Babel configuration (e.g. .babelrc)
{
  "plugins": ["emotion"]
}

1.从Emotion导入jsx函数,并使用pragma指示Babel在每个文件的基础上使用此导入的函数

/** @jsx jsx */
import { jsx } from '@emotion/core'
wwtsj6pe

wwtsj6pe3#

这个方法解决了我的问题:

/** @jsxImportSource @emotion/react */
import { css } from "@emotion/react"

export default function somepage() {

  const color = 'red'

  return (<div
    css={css`
      background-color: hotpink;
      &:hover {
        color: ${color};
      }
    `}
  >
    Hello World.
  </div>)
}
xdyibdwo

xdyibdwo4#

除了包括@emotion/babel-plugin之外,还有一些我遗漏的配置导致了这个错误。

{
  "presets": [
    [
      "@babel/preset-react",
      { "runtime": "automatic", "importSource": "@emotion/react" }
    ]
  ],
  "plugins": ["@emotion/babel-plugin"]
}

缺少"importSource": "@emotion/react"。添加后,错误消失,样式正确实现。

rvpgvaaj

rvpgvaaj5#

您需要安装这个Babel插件,babel-preset-css-prop

nwnhqdif

nwnhqdif6#

有两种方法可以开始使用css属性。
1.巴别塔预设

  1. JSX编译指示
    这两种方法会产生相同的编译程式码。

JSX编译指示

在使用css prop的源文件的顶部设置jsx pragma。此选项最适合测试css prop特性或在babel配置不可配置的项目中(create-react-app、codesandbox等)。

/** @jsx jsx */

如果不起用途:

/** @jsxImportSource @emotion/react */

巴别塔预设

此方法不适用于Create React App**或其他不允许自定义Babel配置的项目。请改用JSX Pragma方法。

.巴伯尔c

{
  "presets": ["@emotion/babel-preset-css-prop"]
}

无法解决您的问题?请考虑阅读官方文档:******

umuewwlo

umuewwlo7#

/**@jsx jsx */从“@情感/核心”导入{ jsx,css }

相关问题