我有一个使用前端反应的rails应用程序但是我在将其他反应模块添加到我的组件时遇到了问题。我正在使用react-rails将react整合到我的rails应用中。我想将react-modal添加到组件中。我已经使用rails-assets添加react-modal作为gem但我在组件中调用react-modal时遇到了麻烦。我希望它可以像React.DOM一样进行类似的调用,但似乎并非如此。
由于sprockets我无法使用正常的'require()'语法,我想坚持使用rails-assets而不是browserify / webpack解决方案。
所以,为了清楚我想在我的组件中显示模态,到目前为止,我得到一个错误,返回“模态未定义”。谢谢你的帮助。
这是rails-assets sourced 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"
答案 0 :(得分:2)
当您需要使用sprockets的组件时它将作为全局对象使用,该组件将具有相同的包名称,例如:
如果您使用的是react-modal-bootstrap
//= require react-modal-bootstrap
可用的组件将是:
<ReactModalBoostrap.Modal />
对于您正在使用的模式,它应该是相同的,因此您应该使用<Modal />
而不是<ReactModal.Modal />
另请记住在运行bundle install
答案 1 :(得分:0)
通常当我使用React和Rails时,我会遵循这种模式:
在我的application.html.erb
中 <div id="react-app"> </div>
<div class="main-content">
<%= yield %>
<%= javascript_include_tag 'bundle' %>
</div>
我将整个React App添加到<div>
。由于Rails视图通常有不同的路由,我将在app.js中使用类似的方式处理路由,只在需要时呈现我需要的路径:
_renderSpecificComponents () {
return (
window.location.pathname === '/users/sign_in' ? (
<Login />
) : (
<Header />
)
);
如果您不想遵循这样的模式,我建议的一个建议是确保您需要在Modal中使用您的特定组件,而不仅仅是App.js.