如何使用 JSS 向 body 元素添加样式?

How can I add style to the body element with JSS?

我正在构建一个使用 react-jss 来设置组件样式的应用程序,想知道是否可以将样式添加到顶级元素(如 htmlbody)。

为了说明,我有一个简单的 NotFound 组件,我正在使用 react-jss 进行样式设置。样式工作正常,但问题是 body 元素有一个我想删除的默认边距。

NotFound.js

import React from 'react';
import injectSheet from 'react-jss';

const styles = {
    notFound: {
        fontFamily: 'Roboto',
        backgroundColor: 'blue',
        color: 'white'
    }
}

function NotFound({ classes }) {
  return (
    <div className={classes.notFound}>
      NOT FOUND
    </div>
  )
}

export default injectSheet(styles)(NotFound);

有谁知道是否可以使用 css-in-js 删除此边距? (我想避免 css)

您可以使用 jss-plugin-global 引入的语法

  '@global': {
    body: {...}
  }

还建议为此创建一个单独的组件并用它包装您的组件。否则您的特定组件将变得不那么可重用。

为了详细说明 Oleg 的回应,我就是这样做的:

1.Create 我自己的 JssProvider。 注意: 还必须添加 jss-plugin-camel-case 否则它不会将我的属性从 camelCase 解析为 lisp-case:

import App from './App';
import { create } from 'jss';
import { JssProvider } from 'react-jss';
import globalPlugin from 'jss-global';
import camelCase from 'jss-plugin-camel-case';

const jss = create();
jss.use(globalPlugin(), camelCase());

render(
    <JssProvider jss={jss}>
        <Router>
            <App />
        </Router>
    </JssProvider>
    document.getElementById("app")
);

2.Added 我的全局 属性 到我的顶级组件

import React from "react";

import Main from "./common/ui/components/Main";
import NotFound from "./components/NotFound";
import injectSheet from 'react-jss';

const style = {
    '@global': {
        body: {
            margin: 0
        }
    }
};

const App = () => {
    return (
        <Main>
            <Switch>
                <Route component={NotFound}/>
            </Switch>
        </Main>
    );
};

export default injectSheet(style)(App);

就是这样!工作得很好。

编辑: 经过更多研究,我发现我不需要第 1 步。只需将 @global 样式添加到我的 App 组件即可工作。我想这个 jss-global 插件必须是 react-jss 中的默认插件。 (如果我错了,有人纠正我)