警告:收到非布尔属性 `jsx` 的 `true`。时代风格的 Jsx

Eri*_*sky 5 ecmascript-6 reactjs babeljs styled-jsx

我正在尝试将 styled-jsx 与一些代码一起使用。但是,无论我做什么,我似乎都会遇到错误

index.js:1437 Warning: Received `true` for a non-boolean attribute `jsx`.

If you want to write it to the DOM, pass a string instead: jsx="true" or jsx={value.toString()}.
    in style (at App.js:12)
    in div (at App.js:9)
    in Test (created by Route)
    in Route (at App.js:29)
    in Router (created by BrowserRouter)
    in BrowserRouter (at App.js:27)
    in App (at src/index.js:7)
Run Code Online (Sandbox Code Playgroud)

我尝试重新安装 node_modules,确保我的配置都很好,并测试了不同的版本。

我的 package.json,

{
  "name": "preview",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "contentful": "^7.4.1",
    "react": "^16.8.6",
    "react-dom": "^16.8.4",
    "react-router-dom": "^4.3.1",
    "react-scripts": "^3.0.1",
    "socket.io-client": "^2.2.0",
    "styled-jsx": "^3.2.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "babel": {
    "presets": [
      "@babel/preset-stage-2"
    ],
    "plugins": [
      "styled-jsx/babel"
    ]
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ],
  "proxy": "http://localhost:5000/"
}

Run Code Online (Sandbox Code Playgroud)

我的示例 React 代码仍然抛出错误。

const Test = () => {
    return (
        <div>
        <p>test
        </p>
        <style jsx>{
            `
            p {
                color: red;
            }
            `
        }
        </style>
        </div>)
}

class App extends Component {

  render () {
    return (
      <Router>

        <Route path='/test' component={Test}/>

      </Router>

    )
  }

}

export default App;
Run Code Online (Sandbox Code Playgroud)

我希望不会有任何基于文档的错误消息

Gno*_*por 9

这个问题的答案在警告中。只需将样式的 jsx 属性类型从布尔值转换为字符串即可:

从:<style jsx> {your style here} </style>

到:<style jsx="true"> {your style here} </style>

  • 这给了我一个 lint 错误“类型‘字符串’不能分配给类型‘布尔值|’” 未定义'` (4认同)

Gle*_*nov 8

好的。由于我自己花了几个小时才解决这个问题,所以我希望我可以帮助你们也有这个问题。

styled-jsx与 一起使用create-react-app,您需要:

  1. yarn add react-app-rewired customize-cra

  2. 替换为package.json

"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
Run Code Online (Sandbox Code Playgroud)

"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
Run Code Online (Sandbox Code Playgroud)
  1. 创建(在根目录中,旁边package.json)文件config-overrides.js
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
Run Code Online (Sandbox Code Playgroud)
  1. 在根目录下创建文件.babelrc(仅在运行时使用jest test
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
Run Code Online (Sandbox Code Playgroud)
  1. 在你的index.js(或者你将 React 安装到 DOM 中的地方),在调用之前ReactDOM.render(...),插入以下代码,取自styled-jsx问题 #560
const { override, addBabelPlugin, addBabelPreset } = require('customize-cra');
module.exports = override(
    addBabelPlugin('styled-jsx/babel')
);
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果没有它,这种复杂的配置就有点变化无常。

yarn build仅当您使用或yarn test与 create-react-app 一起使用时,才需要步骤 4 和 5 。


Jua*_*aza -2

使用样式组件。不支持嵌套样式。看看https://github.com/zeit/styled-jsx/pull/260 避免这个:

<div>
  <span>
      <style jsx>{...}</style>
  </span>
</div>
Run Code Online (Sandbox Code Playgroud)