使用'material-ui'和react-rails gem?

Cu1*_*ure 7 ruby-on-rails asset-pipeline reactjs react-jsx react-rails

我想在我的Rails 4应用程序中使用material-ui组件库.我目前正在使用react-rails gem将.jsx编译添加到资产管道.我在gemfile中通过rails-assets添加了material-ui,如下所示:

source 'https://rails-assets.org' do
  gem 'rails-assets-material-ui'
end
Run Code Online (Sandbox Code Playgroud)

我在我的application.js文件中需要这样的库:

//= require material-ui
Run Code Online (Sandbox Code Playgroud)

但是我不断收到错误"找不到文件'材料-ui".如何使用react-rails gem在我的Rails应用程序中使用material-ui组件库?

Cu1*_*ure 16

好的,这就是我到目前为止所做的工作......

到我添加的gemfile:

gem 'react-rails'
gem "browserify-rails"
Run Code Online (Sandbox Code Playgroud)

这为我们提供了反应库,助手和jsx编译,以及使用require()sytax来获取JS中的模块的能力.browserify-rails还允许我们通过package.json文件在Rails资产中要求npm模块.

我们可以通过这个package.json文件将material-ui库添加到我们的应用程序中...

"dependencies" : {
    "browserify": "~> 10.2.4",
    "browserify-incremental": "^3.0.1",
    "material-ui": "0.13.1"
  },
Run Code Online (Sandbox Code Playgroud)

材料ui库使用require语法以正确的顺序将所有不同的jsx组件文件连接在一起,这就是我们需要使用browserify-rails的原因.

接下来我们将反应代码放在一起我在asset/javascripts中创建了一个名为/ react的新目录...

react
    L /components
    L react.js
    L react-libraries.js
    L theme.js
Run Code Online (Sandbox Code Playgroud)

现在作为'material-ui'依赖项的一部分,我们有了react库.这意味着目前我们有两个图书馆副本.一个来自'react-rails'宝石,另一个来自'material-rails'的'material-ui'库依赖.让我们使用'material-ui'依赖关系中的一个,并从'react-rails'中选择一个.

在react.js中:

//= require ./react-libraries
//= require react_ujs
//= require_tree ./components
Run Code Online (Sandbox Code Playgroud)

然后在react-libraries.js中

//React Library
React = require('react');
//Material Design Library
MaterialUi = require('material-ui/lib');
injectTapEventPlugin = require('react-tap-event-plugin'); injectTapEventPlugin();
//Material Design Library Custom Theme
MyRawTheme = require('./theme');
ThemeManager = require('material-ui/lib/styles/theme-manager');
Run Code Online (Sandbox Code Playgroud)

然后我们想要在资产管道中包含所有这些......

//= require react/react
Run Code Online (Sandbox Code Playgroud)

在application.js中.

现在,您可以在/ react/components /中的jsx文件中编写组件.您可能还希望用...命名组件.

//Custom Components Namespace
Components = {};
Run Code Online (Sandbox Code Playgroud)

在react-libraries.js中

你可以在theme.js中自定义你的主题......

Colors = require('material-ui/lib/styles/colors');
ColorManipulator = require('material-ui/lib/utils/color-manipulator');
Spacing = require('material-ui/lib/styles/spacing');

module.exports = {
  spacing: Spacing,
  fontFamily: 'Roboto, sans-serif',
  palette: {
    primary1Color: Colors.grey300,
    primary2Color: Colors.grey300,
    primary3Color: Colors.lightBlack,
    accent1Color: '#01A9F4',
    accent2Color: Colors.grey100,
    accent3Color: Colors.grey500,
    textColor: Colors.darkBlack,
    alternateTextColor: Colors.white,
    canvasColor: Colors.white,
    borderColor: Colors.grey300,
    disabledColor: ColorManipulator.fade(Colors.darkBlack, 0.3)
  }
};
Run Code Online (Sandbox Code Playgroud)

希望有帮助:)