如何在 react-rails 组件中从 rails-assets.org 调用 react-modal
How to call react-modal from rails-assets.org in react-rails component
我有一个 rails 应用程序在前端使用 React,但我无法将其他 React 模块添加到我的组件。我正在对一个组件使用 react-rails for incorporating react into my rails app. I would like to add react-modal。我已经使用 rails-assets 将 react-modal 添加为 gem 但我在组件中调用 react-modal 时遇到问题。我希望这将是一个与 React.DOM 类似的调用,但事实并非如此。
由于链轮,我无法使用正常的 'require()' 语法,我想坚持使用 rails-assets 而不是 browserify/webpack 解决方案。
所以为了清楚起见,我想在我的组件中显示模态,但截至目前,我收到了一个错误返回 'Modal is not defined'。感谢您的帮助。
这是 rails 来源的资产 gem:
### Rails Assets Gems
source 'https://rails-assets.org' do
gem 'rails-assets-react-modal'
end
Application.js
//= require react
//= require react_ujs
//= require react-modal
//= require components
这是我的组件:
customStyles = content:
top: '50%'
left: '50%'
right: 'auto'
bottom: 'auto'
marginRight: '-50%'
transform: 'translate(-50%, -50%)'
DOM = React.DOM
@EntityBulkTracker = React.createClass
displayName: 'EntityBulkTracker'
getInitialState: ->
entity: @props.entity
modalIsOpen: true
openModal: (e) ->
@setState modalIsOpen: true
closeModal: (e) ->
@setState modalIsOpen: false
render: ->
DOM.div null,
Modal
isOpen: @state.modalIsOpen
onRequestClose: @closeModal
style: "#{customStyles}"
DOM.h2 null,
"Hello"
DOM.input
type: 'button'
onClick: @closeModal
DOM.div null,
"I am a modal"
通常当我将 React 与 Rails 一起使用时,我会遵循这种模式:
在我的application.html.erb
<div id="react-app"> </div>
<div class="main-content">
<%= yield %>
<%= javascript_include_tag 'bundle' %>
</div>
那个 <div>
将是我将整个 React 应用程序附加到的内容。由于 Rails 视图通常有不同的路由,我将在我的 app.js 中处理路由,只在需要时渲染我需要的内容:
_renderSpecificComponents () {
return (
window.location.pathname === '/users/sign_in' ? (
<Login />
) : (
<Header />
)
);
如果您不想遵循这样的模式,我的一个建议是确保您在 Modal 中要求您的特定组件,而不仅仅是 App.js。
当你需要一个使用 sprockets 的组件时它将作为一个全局对象可用,该组件将具有与包相同的名称,例如:
如果您正在使用 react-modal-bootstrap
//= require react-modal-bootstrap
可用组件为:
<ReactModalBoostrap.Modal />
对于您正在使用的模式,它应该是一样的,所以您应该使用 <ReactModal.Modal />
而不是 <Modal />
还记得在 运行 bundle install
之后重新启动服务器
我有一个 rails 应用程序在前端使用 React,但我无法将其他 React 模块添加到我的组件。我正在对一个组件使用 react-rails for incorporating react into my rails app. I would like to add react-modal。我已经使用 rails-assets 将 react-modal 添加为 gem 但我在组件中调用 react-modal 时遇到问题。我希望这将是一个与 React.DOM 类似的调用,但事实并非如此。
由于链轮,我无法使用正常的 'require()' 语法,我想坚持使用 rails-assets 而不是 browserify/webpack 解决方案。
所以为了清楚起见,我想在我的组件中显示模态,但截至目前,我收到了一个错误返回 'Modal is not defined'。感谢您的帮助。
这是 rails 来源的资产 gem:
### Rails Assets Gems
source 'https://rails-assets.org' do
gem 'rails-assets-react-modal'
end
Application.js
//= require react
//= require react_ujs
//= require react-modal
//= require components
这是我的组件:
customStyles = content:
top: '50%'
left: '50%'
right: 'auto'
bottom: 'auto'
marginRight: '-50%'
transform: 'translate(-50%, -50%)'
DOM = React.DOM
@EntityBulkTracker = React.createClass
displayName: 'EntityBulkTracker'
getInitialState: ->
entity: @props.entity
modalIsOpen: true
openModal: (e) ->
@setState modalIsOpen: true
closeModal: (e) ->
@setState modalIsOpen: false
render: ->
DOM.div null,
Modal
isOpen: @state.modalIsOpen
onRequestClose: @closeModal
style: "#{customStyles}"
DOM.h2 null,
"Hello"
DOM.input
type: 'button'
onClick: @closeModal
DOM.div null,
"I am a modal"
通常当我将 React 与 Rails 一起使用时,我会遵循这种模式:
在我的application.html.erb
<div id="react-app"> </div>
<div class="main-content">
<%= yield %>
<%= javascript_include_tag 'bundle' %>
</div>
那个 <div>
将是我将整个 React 应用程序附加到的内容。由于 Rails 视图通常有不同的路由,我将在我的 app.js 中处理路由,只在需要时渲染我需要的内容:
_renderSpecificComponents () {
return (
window.location.pathname === '/users/sign_in' ? (
<Login />
) : (
<Header />
)
);
如果您不想遵循这样的模式,我的一个建议是确保您在 Modal 中要求您的特定组件,而不仅仅是 App.js。
当你需要一个使用 sprockets 的组件时它将作为一个全局对象可用,该组件将具有与包相同的名称,例如:
如果您正在使用 react-modal-bootstrap
//= require react-modal-bootstrap
可用组件为:
<ReactModalBoostrap.Modal />
对于您正在使用的模式,它应该是一样的,所以您应该使用 <ReactModal.Modal />
<Modal />
还记得在 运行 bundle install