Nic*_*ico 5 ruby-on-rails reactjs
正如标题所说,当我运行 rails server 时,我的反应组件都不可见。我正在使用 gem react-rails。我知道他们正在渲染,因为在检查页面的 body 标签时,它有<div data-react-class="Home" data-react-props="{}"></div>.
为了测试它是否是我的电脑,我制作了另一个 rails 应用程序,在我的根目录中创建了一个具有完全相同格式的 react 组件,即
class Home extends React.Component {
render() {
return (
<h1>Hello</h1>
)
}
}
Run Code Online (Sandbox Code Playgroud)
它出现在屏幕上。我的控制台中绝对没有错误,所以我不知道问题是什么。两个 Rails 应用程序(可见和不可见)之间的区别在于,损坏的应用程序使用了设计、引导程序,并且具有更多的迁移/模型/控制器。此外,我删除了损坏的涡轮链接,但即使将其重新添加,也没有任何区别。
我面临着同样的问题。使用react-rails宝石。
没有控制台错误,webpacker编译成功。助手也工作得很好,react_component('Home')因为我可以在 html 中看到
<div data-react-class="Home" data-react-props="{}"></div>
Run Code Online (Sandbox Code Playgroud)
安装 gem 时,以下示例位于:
// Run this example by adding <%= javascript_pack_tag 'hello_react' %>
// to the head of your layout file,
// like app/views/layouts/application.html.erb.
// All it does is render <div>Hello React</div> at the bottom
// of the page.
import React from 'react'
import ReactDOM from 'react-dom'
import PropTypes from 'prop-types'
const Hello = props => (
<div>Hello {props.name}!</div>
)
Hello.defaultProps = {
name: 'David'
}
Hello.propTypes = {
name: PropTypes.string
}
document.addEventListener('DOMContentLoaded', () => {
ReactDOM.render(
<Hello name="React" />,
document.body.appendChild(document.createElement('div')),
)
})
Run Code Online (Sandbox Code Playgroud)
效果很好。
但是该组件在以下情况下渲染:DOMContentLoaded。所以该组件是由客户端渲染的。
无论如何,阅读文档发现prerender
prerender: true 在服务器上渲染组件。
所以使用=react_component("Home", {}, {prerender: true})对我有用。
| 归档时间: |
|
| 查看次数: |
1300 次 |
| 最近记录: |