Ruby on rails 使用';材料界面';用宝石?
我想在Rails 4应用程序中使用material ui组件库。我目前正在使用react rails gem将.jsx编译添加到资产管道中。我通过gemfile中的rails资产添加了材质ui,如下所示:Ruby on rails 使用';材料界面';用宝石?,ruby-on-rails,reactjs,asset-pipeline,react-jsx,react-rails,Ruby On Rails,Reactjs,Asset Pipeline,React Jsx,React Rails,我想在Rails 4应用程序中使用material ui组件库。我目前正在使用react rails gem将.jsx编译添加到资产管道中。我通过gemfile中的rails资产添加了材质ui,如下所示: source 'https://rails-assets.org' do gem 'rails-assets-material-ui' end //= require material-ui 我需要application.js文件中的库,如下所示: source 'https://ra
source 'https://rails-assets.org' do
gem 'rails-assets-material-ui'
end
//= require material-ui
我需要application.js文件中的库,如下所示:
source 'https://rails-assets.org' do
gem 'rails-assets-material-ui'
end
//= require material-ui
然而,我不断得到错误“找不到文件的材料界面”。如何将Rails应用程序中的material ui组件库与react Rails gem一起使用?好的,下面是我迄今为止所做的工作 在我添加的文件中:
gem 'react-rails'
gem "browserify-rails"
这为我们提供了react库、帮助程序和jsx编译,以及使用require()sytax在JS中请求模块的能力。browserify rails还允许我们通过package.json文件在rails资产中要求npm模块
我们可以通过这个package.json文件将材质ui库添加到我们的应用程序中
"dependencies" : {
"browserify": "~> 10.2.4",
"browserify-incremental": "^3.0.1",
"material-ui": "0.13.1"
},
material ui库使用require语法以正确的顺序将所有不同的jsx组件文件连接在一起,因此我们需要使用browserify rails
接下来,为了使我们的react代码保持一致,我在asset/javascripts中创建了一个名为/react的新目录
react
L /components
L react.js
L react-libraries.js
L theme.js
现在,作为“material ui”依赖项的一部分,我们有了react库。这意味着目前我们有两份图书馆的副本。一个来自“react rails”gem,另一个来自“browserify rails”的“material ui”库依赖项。让我们使用“material ui”依赖项中的一个,并保留“react rails”中的一个
在react.js中:
//= require ./react-libraries
//= require react_ujs
//= require_tree ./components
然后在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');
然后我们想把所有这些都包括在资产管道中
//= require react/react
在application.js中
现在,您可以在/react/components中的jsx文件中编写组件/
您可能还希望使用以下名称命名组件的名称空间
//Custom Components Namespace
Components = {};
在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');
你可以像这样在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)
}
};
希望有帮助:)我还必须添加ReactDOM=require('react-dom');在React_libraries.js中的React之后。否则,我得到了React.render,使用ReactDOM代替警告。嗨。。。你能举一个简单的例子,说明如何呈现一个材质ui组件…包括jsx和html文件。这个解决方案对我来说根本不起作用。我在使用react rails和browserify rails时遇到了各种各样的错误