Guest User

Untitled

a guest
Jun 20th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. import React, { Component } from 'react';
  2. import logo from './logo.svg';
  3. import './App.css';
  4. import { interval } from 'rxjs'
  5.  
  6. class RenderObservable extends Component {
  7. state = {
  8. value: null
  9. }
  10.  
  11. mountObservable() {
  12. if (!this._subscription && this.props.observable != null) {
  13. this._subscription = this.props
  14. .observable
  15. .subscribe(value => this.setState({ value }))
  16. }
  17. }
  18.  
  19. componentDidMount() {
  20. this.mountObservable()
  21. }
  22.  
  23. componentDidUpdate() {
  24. this.mountObservable()
  25. }
  26.  
  27. componentWillUnmount() {
  28. this._subscription.unsubscribe()
  29. }
  30.  
  31. render() {
  32. return this.state.value
  33. }
  34. }
  35.  
  36. class App extends Component {
  37. _obs$ = interval(1000)
  38.  
  39. render() {
  40. return (
  41. <div className="App">
  42. <header className="App-header">
  43. <img src={logo} className="App-logo" alt="logo" />
  44. <h1 className="App-title">Welcome to React</h1>
  45. </header>
  46. <RenderObservable observable={this._obs$} />
  47. <p className="App-intro">
  48. To get started, edit <code>src/App.js</code> and save to reload.
  49. </p>
  50. </div>
  51. );
  52. }
  53. }
  54.  
  55. export default App;
Add Comment
Please, Sign In to add comment