当我尝试在react 18中使用create-react-app时,css
prop不起作用,typescript和emotion 11 - elements仍然是onstyled,并且在DOM中,元素有一个css
属性,其值为:
您已尝试将css
函数返回的对象字符串化。它不应该直接使用(例如作为className
prop 的值),而是交给情感,以便它可以处理它(例如,作为css
prop的值)。
我可以通过建立一个新项目来复制:
npx create-react-app test-ts-emotion --template typescript
cd test-ts-emotion
npm i --save @emotion/react
然后编辑src/App.tsx
为:
import React from 'react';
import { css } from '@emotion/react';
function App() {
return (
<div css={css`background-color: red`}>
Hello, tester.
</div>
);
}
export default App;
我把jsxImportSource
加到tsconfig.json
上:
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"jsxImportSource": "@emotion/react"
},
"include": [
"src"
]
}
然而,css prop不起作用(元素没有样式化,我得到上面的消息作为DOM属性的值):
您可以在my test repo on Github上检查此设置。我相信我已经遵循了the instructions,但也许我错过了一些东西。先谢谢你了!
2条答案
按热度按时间sbdsn5lh1#
如果你像我一样使用
create-react-app
,你必须在每个文件的顶部添加一个显式的配置:此解决方案在此Emotion问题中被引用和确认。这是一个
create-react-app
bug。this pull request on create-react-app中存在一个修复程序,但它是一年多前提交的,Facebook没有人费心去看它,所以我怀疑它是否会被合并。gudnpqoy2#
回答得有点晚,但很有意义;你可以保留你的tsconfig.json配置,只需要在你的项目中添加NPM依赖:
最后,在您的babel.config.json中添加一个配置,如下所示:
P.S. repo to minimum React 18 + TypeScript + Emotion template:- github repo