1

Material UI (React) 使用主题解决方案,其中主题对象在 JS 中创建,然后传递到顶级组件。在 Opal 中创建主题对象可能很复杂,因为 Material 组件需要传递一个 JS 函数,在该函数中实际动态创建主题。

有没有人有一个很好的例子?

4

1 回答 1

1

经过一些实验,我通过混合 JS 和 Opal 代码得到了很好的效果,所以这里是解决方案,以防其他人提出这个问题。(可能有更好的“更多蛋白石”解决方案,所以如果有,请发布替代答案,但下面的答案效果很好。

首先用 webpack 导入 JS 库:

import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';
import indigo from '@material-ui/core/colors/indigo';
import pink from '@material-ui/core/colors/pink';
import red from '@material-ui/core/colors/red';
global.createMuiTheme = createMuiTheme;
global.MuiThemeProvider = MuiThemeProvider;
global.indigo = indigo;
global.pink = pink;
global.red = red;

将以下内容添加到您的 Javascript 资产中:

// app/assets/javascripts/my_theme.js
const my_theme = createMuiTheme(
  { palette: {
    primary: { main: pink[500] },
    secondary: { main: indigo[500] }
  }
});

然后在您的顶级组件代码中提供主题:

class MyRouter < HyperComponent
  include Hyperstack::Router

  render(DIV) do
    MuiThemeProvider(theme: `my_theme` ) do
      CssBaseline do
        ...
      end
    end
  end
end
于 2019-04-07T05:01:07.623 回答