Material UI 主题和 Hyperstack

Material UI Themes and Hyperstack

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

有没有人有这个运作良好的例子?

经过一些实验后,我通过混合 JS 和 Opal 代码使它运行良好,所以这里是解决方案,以防其他人想到这个。 (可能有更好的 'more Opal' 解决方案,所以如果有请做 post 替代答案,但下面的答案确实有效。

首先用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