ããã«ã¡ã¯HabrïŒ Michael Chanã®èšäºã
React Patterns ãã®ç¡æç¿»èš³ã«ãããã€ãã®ã¡ã¢ãšè¿œå ãå ããŠãããªãã®æ³šæãåèµ·ããŸãã
ãŸããå
ã®ããã¹ãã®äœè
ã«æè¬ããããšæããŸãã 翻蚳ã§ã¯ãã¹ããŒãã¬ã¹ã³ã³ããŒãã³ãïŒãã³ãã³ã³ããŒãã³ããã³ã³ããŒãã³ãvsã³ã³ããïŒã®æå®ãšããŠãã·ã³ãã«ã³ã³ããŒãã³ããã®æŠå¿µã䜿çšããŸããã
ã³ã¡ã³ãã§ã¯ã建èšçãªæ¹å€ãšãReactã®ä»£æ¿ãã¿ãŒã³ããã³æ©èœãæè¿ããŸãã
ç®æ¬¡- åçŽãªã³ã³ããŒãã³ã -ã¹ããŒãã¬ã¹æ©èœ
- JSX屿§ã®ååž -JSXã¹ãã¬ãã屿§
- åŒæ°ã®ç Žå£ - åŒæ°ã®ç Žå£
- æ¡ä»¶ä»ãã¬ã³ããªã³ã°
- åå«ã¿ã€ã -åã¿ã€ã
- åå«ãšããŠã®é
å -åãšããŠã®é
å
- åãšããŠã®æ©èœ - åãšããŠã®æ©èœ
- ã¬ã³ããªã³ã°ã®é¢æ° -ã³ãŒã«ããã¯ã®ã¬ã³ããªã³ã°
- åå« -åäŸã®ãã¹ã¹ã«ãŒ
- ã³ã³ããŒãã³ããªãã€ã¬ã¯ã -ãããã·ã³ã³ããŒãã³ã
- ã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«èšå®-ã¹ã¿ã€ã«ã³ã³ããŒãã³ã
- ã€ãã³ãã¹ã€ãã
- ã¬ã€ã¢ãŠãã³ã³ããŒãã³ã
- ã³ã³ããã³ã³ããŒãã³ã
- 髿¬¡ã³ã³ããŒãã³ã
è¡ããïŒ
ã¹ããŒãã¬ã¹æ©èœ
ã¹ããŒãã¬ã¹é¢æ°ïŒä»¥éãã·ã³ãã«ã³ã³ããŒãã³ããšåŒã³ãŸãïŒã¯ããŠãããŒãµã«ã³ã³ããŒãã³ããå®çŸ©ããããã®åªããæ¹æ³ã§ãã ç¶æ
ãDOMèŠçŽ ãžã®åç
§ïŒrefïŒã¯å«ãŸããŠããŸããããããã¯åãªã颿°ã§ãã
const Greeting = () => <div>Hi there!</div>
圌ãã¯ãã©ã¡ãŒã¿ïŒå°éå
·ïŒãšã³ã³ããã¹ããæž¡ããŸã
const Greeting = (props, context) => <div style={{color: context.color}}>Hi {props.name}!</div>
ãããã¯ïŒ{}ïŒã䜿çšãããšãããŒã«ã«å€æ°ãå®çŸ©ã§ããŸã
const Greeting = (props, context) => { const style = { fontWeight: "bold", color: context.color, } return <div style={style}>{props.name}</div> }
ããããå¥ã®é¢æ°ã䜿çšãããšåãçµæãåŸãããšãã§ããŸã
const getStyle = context => ({ fontWeight: "bold", color: context.color, }) const Greeting = (props, context) => <div style={getStyle(context)}>{props.name}</div>
defaultPropsãpropTypesãcontextTypesãå®çŸ©ã§ããŸã
Greeting.propTypes = { name: PropTypes.string.isRequired } Greeting.defaultProps = { name: "Guest" } Greeting.contextTypes = { color: PropTypes.string }
JSXã¹ãã¬ãã屿§
屿§é
åžã¯JSXã®æ©èœã§ãã ãªããžã§ã¯ãã®ãã¹ãŠã®ããããã£ãJSX屿§ãšããŠæž¡ããããªæ§æäžã®å·¥å€«
ããã2ã€ã®äŸã¯åçã§ãã
-å°éå
·ã¯å±æ§ãšããŠæžãããŠããŸãïŒ
<main className="main" role="main">{children}</main>
-å°éå
·ã¯ãªããžã§ã¯ããããé
åžããããŸãïŒ
<main {...{className: "main", role: "main", children}} />
äœæãããªããžã§ã¯ããžã®å°éå
·ãªãã€ã¬ã¯ãã䜿çšãã
const FancyDiv = props => <div className="fancy" {...props} />
ããã§ãç®çã®å±æ§ïŒclassNameïŒãååšããããšãããã³é¢æ°ã§çŽæ¥æå®ããªãã£ããpropsãšãšãã«æž¡ããã屿§ãååšããããšã確èªã§ããŸãã
<FancyDiv data-id="my-fancy-div">So Fancy</FancyDiv>
çµæïŒ <div className="fancy" data-id="my-fancy-div">So Fancy</div>
é åºãéèŠã§ããããšãèŠããŠãããŠãã ããã props.classNameãå®çŸ©ãããŠããå Žåããã®ããããã£ã¯FancyDivã§å®çŸ©ãããclassNameãäžæžãããŸã
<FancyDiv className="my-fancy-div" />
çµæïŒ <div className="my-fancy-div"></div>
FancyDivs classNameã¯ãã¹ãã¬ããããããïŒ{... props}ïŒã®åŸã«é
眮ããããšã§ãåžžã«ãåã€ãããšãã§ããŸãã
ããããã£ãåžžã«å°éå
·ãééããŠäžæžãããããšã確èªã§ããŸã
const FancyDiv = props => <div {...props} className="fancy" />
ãããšã¬ã¬ã³ããªã¢ãããŒãããããŸã-äž¡æ¹ã®ããããã£ãçµã¿åãããŸãã
const FancyDiv = ({ className, ...props }) => <div className={["fancy", className].join(' ')} {...props} />
åŒæ°ã®ç Žå£
ç Žå£çãªå²ãåœãŠã¯ãES2015æšæºã®æ©èœã§ãã Simple Componentsã®å°éå
·ã«ããåããŸãã
ãããã®äŸã¯åçã§ãã
const Greeting = props => <div>Hi {props.name}!</div> const Greeting = ({ name }) => <div>Hi {name}!</div>
æ®ãã®ïŒ...ïŒæŒç®åæ§æã䜿çšãããšãæ®ãã®ããããã£ããªããžã§ã¯ãã«åéã§ããŸã
const Greeting = ({ name, ...props }) => <div>Hi {name}!</div>
ããã«ããã®ãªããžã§ã¯ãã䜿çšããŠãäœæãããã³ã³ããŒãã³ãã§æªå²ãåœãŠã®ããããã£ãããã«è»¢éã§ããŸãã
const Greeting = ({ name, ...props }) => <div {...props}>Hi {name}!</div>
æ§æãããã³ã³ããŒãã³ãã«éDOMå°éå
·ã転éããªãã§ãã ããã ã³ã³ããŒãã³ãåºæã®ããããã䜿çšããã«æ°ãããããããªããžã§ã¯ããäœæã§ãããããããã¯éåžžã«ç°¡åã§ãã
æ¡ä»¶ä»ãã¬ã³ããªã³ã°
ã³ã³ããŒãã³ãã§ã¯éåžžã®if / elseæ§æã䜿çšã§ããŸãã ããããæ¡ä»¶ä»ãïŒäžé
ïŒæŒç®åã¯ããªãã®åéã§ã
ãã {condition && <span>Rendered when `truthy`</span> }
ã§ãªãéã {condition || <span>Rendered when `falsey`</span> }
if-elseïŒãã¡ããšããã¯ã³ã©ã€ããŒïŒ {condition ? <span>Rendered when `truthy`</span> : <span>Rendered when `falsey`</span> }
if-elseïŒå€§ããªãããã¯ïŒ {condition ? ( <span> Rendered when `truthy` </span> ) : ( <span> Rendered when `falsey` </span> )}
*ç§ã¯æåŸã®äŸã®æ§æã䜿çšããªãããšã奜ã¿ãŸãããã®å Žåãç¹å®ã®ã³ãŒãã«ãã¹ãŠäŸåããŸãããéåžžã®if / elseã䜿çšããããšã¯ããæçœã§ãã
åäŸã®çš®é¡
Reactã¯ãããããã¿ã€ãã®åãã¬ã³ããªã³ã°ã§ããŸãã åºæ¬çã«ã¯é
åãŸãã¯æååã§ã
ã²ã <div> Hello World! </div>
é
å <div> {["Hello ", <span>World</span>, "!"]} </div>
颿°ã¯åå«ãšããŠã䜿çšã§ããŸãã ãã ãããããã®åäœã芪ã³ã³ããŒãã³ããšèª¿æŽããå¿
èŠããããŸãã
æ©èœ <div> {() => { return "hello world!"}()} </div>
åãšããŠã®é
å
åã®é
åã䜿çšããããšã¯äžè¬çãªãã¿ãŒã³ã§ããããšãã°ãããã¯Reactã§ãªã¹ããäœæããæ¹æ³ã§ãã
mapïŒïŒã䜿çšããŠãé
åã®åå€ã«å¯ŸããŠReactèŠçŽ ã®é
åãäœæããŸãã
<ul> {["first", "second"].map((item) => ( <li>{item}</li> ))} </ul>
ããã¯ããªããžã§ã¯ããæã€é
åãªãã©ã«ãšåçã§ã
<ul> {[ <li>first</li>, <li>second</li>, ]} </ul>
ãã®ãããªãã¿ãŒã³ã¯ãã³ãŒãã®èšè¿°ãç°¡çŽ åããããã«ãæ§é åã屿§ååžãããã³ãã®ä»ã®æ©èœãšçµã¿åãããŠäœ¿çšââã§ããŸãã
<ul> {arrayOfMessageObjects.map(({ id, ...message }) => <Message key={id} {...message} /> )} </ul>
åã©ããšããŠã®æ©èœ
颿°ãåå«ãšããŠäœ¿çšããã«ã¯ããããã®æ©æµãåããããšãã§ããããã«ãããã«æ³šæãæãå¿
èŠããããŸãã
<div>{() => { return "hello world!»}()}</div>
ãã ãããããã¯ã³ã³ããŒãã³ãã«è¶
匷床ãäžããããšãã§ããŸããããã¯äžè¬çã«ã¬ã³ããŒã³ãŒã«ããã¯ãšåŒã°ããææ³ã§ãã
ãã®åŒ·åãªææ³ã¯ãReactMotionãªã©ã®ã©ã€ãã©ãªã§äœ¿çšãããŠããŸãã ãããé©çšãããšãã¬ã³ããªã³ã°ããžãã¯ãå®å
šã«ã³ã³ããŒãã³ãèªäœã«æž¡ãã®ã§ã¯ãªãã芪ã³ã³ããŒãã³ãããå¶åŸ¡ã§ããŸãã
ã³ãŒã«ããã¯ãã¬ã³ããªã³ã°
ã¬ã³ããªã³ã°ã³ãŒã«ããã¯ã䜿çšããã³ã³ããŒãã³ãã®äŸã次ã«ç€ºããŸãã ããã¯äžè¬çã«ã¯åœ¹ã«ç«ããªãããããã¯å¯èœæ§ã®è¯ãäŸã§ããã
const Width = ({ children }) => children(500)
ã³ã³ããŒãã³ãã¯ãç¹å®ã®åŒæ°ãæã€é¢æ°ãšããŠåå«ãåŒã³åºããŸãã ãã®å Žåãæ°ã¯500ã§ãã
ãã®ã³ã³ããŒãã³ãã䜿çšããã«ã¯ãåã³ã³ããŒãã³ããšããŠé¢æ°ãæž¡ããŸãã
<Width> {width => <div>window is {width}</div>} </Width>
ãã®çµæãåŸãããŸã
<div>window is 500</div>
ãã®ã¢ãããŒãã§ã¯ãæ¡ä»¶ä»ãã¬ã³ããªã³ã°ã«ïŒå¹
ïŒãã©ã¡ãŒã¿ãŒã䜿çšã§ããŸã
<Width> {width => width > 600 ? <div>min-width requirement met!</div> : null } </Width>
ãã®æ¡ä»¶ãäœåºŠã䜿çšããå Žåããã®ããžãã¯ãæž¡ãããã«å¥ã®ã³ã³ããŒãã³ããå®çŸ©ã§ããŸãã
const MinWidth = ({ width: minWidth, children }) => <Width> {width => width > minWidth ? children : null } </Width>
æããã«ãéçãªWidthã³ã³ããŒãã³ãã¯ããŸãæçšã§ã¯ãããŸãããããã®ã¢ãããŒãã§ãã©ãŠã¶ãŒãŠã£ã³ããŠã®ãµã€ãºã確èªã§ããŸããããã¯æ¢ã«äœãã§ã
class WindowWidth extends React.Component { constructor() { super() this.state = { width: 0 } } componentDidMount() { this.setState( {width: window.innerWidth}, window.addEventListener( "resize", ({ target }) => this.setState({width: target.innerWidth}) ) ) } render() { return this.props.children(this.state.width) } }
å€ãã®äººã¯ããã®ã¿ã€ãã®æ©èœã®ããã«é«æ¬¡ã³ã³ããŒãã³ãã奜ã¿ãŸãã ããã¯å人çãªå¥œã¿ã®åé¡ã§ãã
åäŸã®ãã¹ã¹ã«ãŒ
ã³ã³ããã¹ããé©çšããŠåå«ãã¬ã³ããªã³ã°ããã³ã³ããŒãã³ããäœæã§ããŸãã
class SomeContextProvider extends React.Component { getChildContext() { return {some: "context"} } render() {
ããã§ã決å®ãäžãå¿
èŠããããŸãã åå«ãå¥ã®htmlã¿ã°ïŒdivïŒã§ã©ããããããåå«ã®ã¿ãè¿ããŸãã æåã®ãªãã·ã§ã³ã¯æ¢åã®ããŒã¯ã¢ããã«åœ±é¿ããã¹ã¿ã€ã«ã«éåããå¯èœæ§ããããŸãã 2çªç®ã®ãã®ã¯ãšã©ãŒã«ãªããŸãïŒã³ã³ããŒãã³ãããè¿ãããšãã§ãã芪èŠçŽ ã¯1ã€ã ãã§ããããšãèŠããŠããŸãïŒ
ãªãã·ã§ã³1ïŒãªãã·ã§ã³ã®div return <div>{children}</div>
ãªãã·ã§ã³2ïŒãšã©ãŒ return children
ç¹å¥ãªã¡ãœãã-React.Childrenã䜿çšããŠåå«ã管çããããšãæåã§ãã ããšãã°ã次ã®äŸã§ã¯ãåå«ã®ã¿ãè¿ãããšãã§ãã远å ã®ã©ãããŒã¯äžèŠã§ã
return React.Children.only(this.props.children)
ãããã·ã³ã³ããŒãã³ã
ïŒãã®ååãäœããæå³ãããã©ããã¯ããããŸããïŒ èšäºã®èè
ãã¿ã³ã¯ã¢ããªã®ããããšããã«ãããŸãã ãããŠãããããã«ããã¿ã³ãã¿ã€ãã®å±æ§ãå¿
èŠã§ã
<button type=«button">
ãã³ã§äœçŸåããã®ãããªããšãæžãããšã¯ç§ãã¡ã®æ¹æ³ã§ã¯ãããŸããã é«ã¬ãã«ã®ã³ã³ããŒãã³ããèšè¿°ããŠãå°éå
·ãäœã¬ãã«ã®ã³ã³ããŒãã³ãã«ãªãã€ã¬ã¯ãã§ããŸãã
const Button = props => <button type="button" {âŠprops}>
次ã«ããã¿ã³ã®ä»£ããã«ãã¿ã³ã䜿çšããã ãã§ãç®çã®å±æ§ãåãã¿ã³ã«ååšããããšã確èªã§ããŸãã
<Button />
<Button className="CTA">Send Money</Button> // <button type="button" class="CTA">Send Money</button>
ã¹ã¿ã€ã«ã³ã³ããŒãã³ã
ããã¯ãã¹ã¿ã€ã«ã«é©çšããããããã·ã³ã³ããŒãã³ãã§ãã ãã¿ã³ããããšããŸãã 圌女ã¯ã¯ã©ã¹ã䜿çšããŠããã©ã€ããªãã®ããã«èŠããŸãã
<button type="button" className="btn btn-primary»>
ããã€ãã®ç°¡åãªã³ã³ããŒãã³ãã䜿çšããŠããããããç«ãŠãããšãã§ããŸãã
const PrimaryBtn = props => <Btn {...props} primary /> const Btn = ({ className, primary, ...props }) => <button type="button" className={classnames( "btn", primary && "btn-primary", className )} {...props} />
ããã¯ãäœãèµ·ãã£ãŠããããèŠèŠåããã®ã«åœ¹ç«ã¡ãŸãã
PrimaryBtnïŒïŒ
â³BtnïŒ{primaryïŒtrue}ïŒ
â³ãã¿ã³ïŒ{classNameïŒ "btn btn-primary"}ãã¿ã€ãïŒ "button"}ïŒ
â³ '<button type = "button" class = "btn btn-primary">'
ãããã®ã³ã³ããŒãã³ãã䜿çšãããšãåãçµæãè¿ãããŸãã
<PrimaryBtn /> <Btn primary /> <button type="button" className="btn btn-primary" />
ãã®ã¢ãããŒãã¯ãç¹å®ã®ã³ã³ããŒãã³ãã®ç¹å®ã®ã¹ã¿ã€ã«ãåé¢ãããããå
·äœçãªã¡ãªããããããããŸãã
ã€ãã³ãåãæ¿ã
ã€ãã³ããã³ãã©ãèšè¿°ãããšããéåžžã¯é¢æ°ã®åœåèŠåã䜿çšããŸã
handle{eventName} handleClick(e) { }
è€æ°ã®ã€ãã³ããåŠçããã³ã³ããŒãã³ãã®å Žåããã®ååã¯äžå¿
èŠã«ç¹°ãè¿ãããå ŽåããããŸãã ååèªäœã¯ãã¢ã¯ã·ã§ã³/æ©èœã«åçŽã«èªå°ãããããå€ãäžããŸããã
handleClick() { require("./actions/doStuff")() } handleMouseEnter() { this.setState({ hovered: true }) } handleMouseLeave() { this.setState({ hovered: false }) }
ã€ãã³ãã¿ã€ãã¹ã€ããïŒevent.typeïŒã䜿çšããŠããã¹ãŠã®ã€ãã³ãã®ç°¡åãªãã³ãã©ãŒãäœæããŸãããã
handleEvent({type}) { switch(type) { case "click": return require("./actions/doStuff")() case "mouseenter": return this.setState({ hovered: true }) case "mouseenter": return this.setState({ hovered: false }) default: return console.warn(`No case for event type "${type}"`) } }
ç¢å°é¢æ°ã䜿çšããŠé¢æ°ã®åŒæ°ãçŽæ¥åŒã³åºãããšãã§ããŸã
<div onClick={() => someImportedAction({ action: "DO_STUFF" })}
ãã®ãããªåé¡ã«ééãããŸã§ãããã©ãŒãã³ã¹ã®æé©åã«ã€ããŠå¿é
ããå¿
èŠã¯ãããŸããã çå£ã«ãå¿
èŠã¯ãããŸããã
*å人çã«ã¯ãã³ãŒãã«èªã¿ãããã远å ããªãããããã®ã¢ãããŒãã¯æåãããšã¯æããªãã ã³ã³ããã¹ãã«èªåçã«ãã€ã³ãããã颿°ã§Reactæ©èœã䜿çšããããšã奜ã¿ãŸãã ã€ãŸããæ¬¡ã®è¡šèšã¯äžèŠã«ãªããŸãã
this.handleClick = this.handleClick.bind(this)
代ããã«æ¬¡ã®è¡šèšæ³ãæ©èœããŸã
handleClick = () => {âŠ}
ããã«ã©ããã§ãããå¯èœã§ã
onClick={this.handleClick}
ãã®å Žåããã³ãã©ãŒã颿°å
ã§ã³ã³ããã¹ããåç
§ããŠããã³ã³ããã¹ãïŒthisïŒã¯å€±ãããŸããã ãããã£ãŠããã®ãããªé¢æ°ã¯ãä»ã®ã³ã³ããŒãã³ãã«å°éå
·ãšããŠç°¡åã«æž¡ããŠãããããåŒã³åºãããšãã§ããŸãã
ãŸãããã®ãããªé¢æ°ãåå«ã§ããSimple Componentã«æž¡ãå Žåã芪ã³ã³ããŒãã³ãã®event.targetãä»ããŠãã®ã³ã³ããŒãã³ãã®DOMèŠçŽ ãžã®ãªã³ã¯ãååŸã§ããŸããããã¯äŸ¿å©ãªå ŽåããããŸãã
class SomeComponent extends React.Component { onButtonClick = (e) => { const button = e.target;
ã¬ã€ã¢ãŠãã³ã³ããŒãã³ã
ã¬ã€ã¢ãŠãã³ã³ããŒãã³ãã¯ãéçDOMèŠçŽ ã®ãããªãã®ã§ãã ã»ãšãã©ã®å Žåãé »ç¹ã«æŽæ°ãããããšã¯ãããŸããã
æ°Žå¹³ã«2ã€ã®ã³ã³ããŒãã³ããå«ãã³ã³ããŒãã³ããèããŸãã
<HorizontalSplit leftSide={<SomeSmartComponent />} rightSide={<AnotherSmartComponent />} />
ãã®äœæ¥ãç©æ¥µçã«æé©åã§ããŸãã
HorizoâântalSplitã¯äž¡æ¹ã®ã³ã³ããŒãã³ãã®èŠªã³ã³ããŒãã³ãã«ãªãããããããã®ææè
ã«ãªãããšã¯ãããŸããã å
éšã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ãå£ãããšãªããæ±ºããŠæŽæ°ãããã¹ãã§ã¯ãªããšèšããŸãã
class HorizontalSplit extends React.Component { shouldComponentUpdate() { return false } render() { <FlexContainer> <div>{this.props.leftSide}</div> <div>{this.props.rightSide}</div> </FlexContainer> }
ã³ã³ããã³ã³ããŒãã³ã
ãã³ã³ããã¯ããŒã¿ãååŸãã察å¿ãããµãã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããŸãã ããã ãã§ããã-ãžã§ã€ãœã³ã»ãã³ã¿æå®ïŒCommentListã³ã³ããŒãã³ããã¢ããªã±ãŒã·ã§ã³ã§æ°å䜿çšãããŸãã
const CommentList = ({ comments }) => <ul> {comments.map(comment => <li>{comment.body}-{comment.author}</li> )} </ul>
ããŒã¿ã®åä¿¡ãšCommentListã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ãè¡ãæ°ããã³ã³ããŒãã³ããäœæã§ããŸã
class CommentListContainer extends React.Component { constructor() { super() this.state = { comments: [] } } componentDidMount() { $.ajax({ url: "/my-comments.json", dataType: 'json', success: comments => this.setState({comments: comments}); }) } render() { return <CommentList comments={this.state.comments} /> } }
ããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã³ã³ããã¹ãçšã®ããŸããŸãªã³ã³ããã³ã³ããŒãã³ããäœæã§ããŸãã
髿¬¡ã³ã³ããŒãã³ã
é«é颿°ã¯ãä»ã®é¢æ°ãåŒæ°ãšããŠäœ¿çšãããã颿°ãè¿ãããã§ãã颿°ã§ãã ãã®å®çŸ©ã»ã©è€éã§ã¯ãããŸããã ã§ã¯ã髿¬¡ã³ã³ããŒãã³ããšã¯äœã§ããïŒ
æ¢ã«ã³ã³ããã³ã³ããŒãã³ãã䜿çšããŠããŸãããããã¯åãªã颿°ã«ã©ãããããã³ã³ããã§ãã ç°¡åãªGreetingã³ã³ããŒãã³ãããå§ããŸãããã
const Greeting = ({ name }) => { if (!name) { return <div>Connecting...</div> } return <div>Hi {name}!</div> }
props.nameãååŸãããšãããŒã¿ãã¬ã³ããªã³ã°ããŸãã ãã以å€ã®å Žåã¯ããæ¥ç¶ããŠããŸã...ããšè¡šç€ºãããŸãã å°ã髿¬¡ïŒ
const Connect = ComposedComponent => class extends React.Component { constructor() { super() this.state = { name: "" } } componentDidMount() {
ããã¯ãåŒæ°ãšããŠæž¡ããã³ã³ããŒãã³ãïŒComposedComponentïŒãã¬ã³ããªã³ã°ããã³ã³ããŒãã³ããè¿ã颿°ã§ã
次ã«ããã®é¢æ°ã§ã³ã³ããŒããã©ããããŸãã
const ConnectedMyComponent = Connect(Greeting)
ããã¯éåžžã«åŒ·åãªãã³ãã¬ãŒãã§ãããããã³ã³ããŒãã³ãã¯ããŒã¿ãåä¿¡ããŠââãä»»æã®æ°ã®åçŽãªã³ã³ããŒãã³ãã«é
ä¿¡ã§ããŸãã
ãªã³ã¯ïŒãã¹ãŠè±èªïŒïŒ