Reactの実装パターン (Render Callbacks)

Reactの実装パターン (Render Callbacks):


あらすじ

React Routerで使う <Route>コンポーネントの使い勝手で、 render propsでサクッと画面を実装するにはどうすればいいんだろう。

あわよくば、状態に応じて表示するものを切り分ける時にサクッと切り分けたいな。

import { Route, Redirect } from 'react-router' 
 
<Route exact path="/" render={() => ( 
  <span>Top Page</span> 
)}/> 


方針

サクッと実装するためにrecomposeの toRenderProps() を使う。


実装

下記の実装はindex.jsで一筆書きです。

import React from "react"; 
import ReactDOM from "react-dom"; 
import { toRenderProps, withState, lifecycle, compose } from "recompose"; 
import { Dimmer, Loader, Segment } from "semantic-ui-react"; 
import "./styles.css"; 
import "semantic-ui-css/semantic.min.css"; 
 
function App() { 
  return ( 
    <div className="App"> 
      <h1>Hello CodeSandbox</h1> 
      <h2>Start editing to see some magic happen!</h2> 
    </div> 
  ); 
} 
 
const enhance = compose( 
  withState("isLoading", "updateLoading", true), 
  lifecycle({ 
    componentDidMount() { 
      const { updateLoading } = this.props; 
      setTimeout(() => { 
        updateLoading(false); 
      }, 1000); 
    } 
  }) 
); 
const Component = toRenderProps(enhance); 
 
const rootElement = document.getElementById("root"); 
ReactDOM.render( 
  <Component> 
    {({ isLoading }) => 
      isLoading ? ( 
        <Segment> 
          <Dimmer active> 
            <Loader /> 
          </Dimmer> 
        </Segment> 
      ) : ( 
        <App /> 
      ) 
    } 
  </Component>, 
  rootElement 
); 
 

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)