reactjs - Firebase 和 React 以及 React-snapshot(预渲染)

标签 reactjs firebase firebase-realtime-database prerender

我是 firebase 的新手,只是在将所有数据放入 firebase 之前编写了一些简单的测试 react 组件,但不幸的是我无法使其与服务器端预渲染一起使用。使其 SEO 非常重要对我来说很友好,我在互联网上搜索了解决方案,但仍然无法真正弄清楚。请帮助我解决这个问题。提前非常感谢。

下面的简单代码只会使用 React-Snapshot 生成初始状态,当我打开页面时,它将显示初始状态,然后更新到新的状态。但我需要使初始状态对象直接从 Firebase 获取数据并使用 React-Snapshot 生成静态 html。

class FirebaseTestingComponent extends Component {
constructor(){
  super();
  this.state = { 
    speed: 10
  };

}

componentWillMount(){
  const rootRef = firebase.database().ref().child('react');
  const speedRef = rootRef.child('speed');
  speedRef.on('value', snap => {
    this.setState({
      speed: snap.val()
    });
  });
}


render(){
  return (
    <div>
      <h1>{this.state.speed}</h1>
    </div>

  ); 

}

}

最佳答案

通过 SEO 友好,我假设您想要静态内容而不是动态内容(不是 SEO 专家),但 firebase 异步运行,特别是当您使用 .on() 时,就像 websocket 一样,在这种情况下您是否执行 willmount 或 didmount 并不重要.
我对设计的谦虚建议是在渲染页面之前从服务器中的 firebase 获取(firebase 当然支持 java 和 node,不确定其余的),并使用您获取的值设置初始状态,这将保证您的初始状态来自 firebase。由此,您仍然可以使用 .on() 来获取稍后传入的值。

关于reactjs - Firebase 和 React 以及 React-snapshot(预渲染),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45048619/

相关文章:

reactjs - 我在react-native和redux中处理API调用的地方

javascript - 引用错误 : Dispatch is not defined

android - 在 Firebase 实时数据库中切换 bool 值

iOS - 如何禁用 Firebase 缓存?

reactjs - 有没有办法使用 webpack 和 mocha 在我的单元测试中模拟 `process.env.NODE_ENV` ?

javascript - 在自动完成中禁用退格删除选项

firebase - Flutter firebase-admob 检查奖励视频是否正在加载

javascript - 根据 URL 中的参数调用 Firebase 中的特定字段时遇到问题

javascript - 返回在函数内部不起作用(快照)

javascript - Firebase 和 Node.js : event when value added to the list