Reactã³ã³ãã¼ãã³ãã®åºæ¬ååã¨äººæ°ã®UI/UXãã¶ã¤ã³ã©ã¤ãã©ãªã®è§£èª¬

Reactã¯åãªãUIã©ã¤ãã©ãªã§ã¯ãªããã³ã³ãã¼ãã³ããã¼ã¹ã®ã¢ããªã±ã¼ã·ã§ã³éçºãã¬ã¼ã ã¯ã¼ã¯ã§ããUI/UXãã¶ã¤ã³ã®åºæ¬ååã«å ããåå©ç¨æ§ãç¶æ 管çããã¼ã¿ããã¼ãªã©ã®æ¦å¿µãéè¦ã§ãã
Reactã®ã³ã³ãã¼ãã³ããã¼ã¹ã®ã¢ã¼ããã¯ãã£ãæ´»ç¨ããã¨ãUIã¨è£å´ã®ãã¸ãã¯ãåé¢ãã¦ç®¡çãããããªããå¹ççãªã¢ããªã±ã¼ã·ã§ã³ã®éçºãå¯è½ã§ãã
仿¥ã¯ãReactã«ãããã³ã³ãã¼ãã³ãã®åºæ¬ååã®è§£èª¬ã¨ãåå¿è ã«å½¹ç«ã¤Reactã³ã³ãã¼ãã³ãã©ã¤ãã©ãªã®ç´¹ä»ãæä¾ãã¾ãã
ã³ã³ãã¼ãã³ãã®è¨è¨åå
Reactã§ã¯ãã¢ããªã±ã¼ã·ã§ã³ãå°ããªåå©ç¨å¯è½ãªã³ã³ãã¼ãã³ãã«åå²ãã¾ãã
Reactã«ãããã³ã³ãã¼ãã³ãã®åºæ¬ååã¯ãã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯ããéã®éè¦ãªã¬ã¤ãã©ã¤ã³ã§ãã
以ä¸ã«Reactã³ã³ãã¼ãã³ãã®åºæ¬ååã詳ãã説æãã¦ããã¾ãã
ã» åä¸ã®è²¬ä»»ï¼Single Responsibilityï¼: Reactã³ã³ãã¼ãã³ãã¯ãåä¸ã®è²¬ä»»ã®ååSingle Responsibility Principle ï¼SRPï¼ãæã¤ã¹ãã§ãã
åä¸ã®è²¬ä»»ã¯ãã½ããã¦ã§ã¢éçºã«ãããéè¦ãªååã®ä¸ã¤ã§ãã
ãã®ååã«ããã°ãã¯ã©ã¹ãã¢ã¸ã¥ã¼ã«ã¯ä¸ã¤ã®è²¬ä»»ã¾ãã¯å½¹å²ãæã¤ã¹ãã§ããããã以ä¸ã®ãã¨ãè¡ãã¹ãã§ã¯ããã¾ããã
åä¸ã®è²¬ä»»ã®ååã¯ãã½ããã¦ã§ã¢ã®è¨è¨ãã³ã¼ãã£ã³ã°ã«ããã¦ãã¢ã¸ã¥ã¼ã«ã®çµå度ãä½ãããåå©ç¨æ§ãä¿å®æ§ãé«ãããã¨ãç®çã¨ãã¦ãã¾ããåä¸ã®è²¬ä»»ãæã¤ã¢ã¸ã¥ã¼ã«ã¯ãç¹å®ã®æ©è½ãã¿ã¹ã¯ã«éä¸ãããã以å¤ã®æ©è½ãã¿ã¹ã¯ã«é¢ä¸ããªãããã«ãã¾ãã
ä¾ãã°ããã¼ã¿ãã¼ã¹ã¨ã®ããåããè¡ãã¯ã©ã¹ãåä¸ã®è²¬ä»»ã®ååã«å¾ã£ã¦ããå ´åããã®ã¯ã©ã¹ã¯ãã¼ã¿ãã¼ã¹ã¸ã®æ¥ç¶ãã¯ã¨ãªã®å®è¡ã«é¢ãã責任ãæã¡ã¾ããã表示ãã¦ã¼ã¶ã¼å ¥åã®å¦çã«ã¯é¢ä¸ãã¾ããã
ããã«ããããã¼ã¿ãã¼ã¹æä½ã«é¢ãã夿´ããã£ãå ´åã«ã¯ããã®ã¯ã©ã¹ã®ã¿ãä¿®æ£ããã°æ¸ã¿ã¾ãã
ã¤ã¾ããReactã§ã¯1ã¤ã®ã³ã³ãã¼ãã³ãã¯1ã¤ã®ç¹å®ã®æ©è½ãUIé¨åã«éä¸ããã¹ãã§ãããã®ååã«å¾ããã¨ã§ãã³ã³ãã¼ãã³ãã®çè§£ããã¹ãã容æã«ãªãã¾ãã
以ä¸ã«ãåä¸ã®è²¬ä»»ãæã¤Reactã³ã³ãã¼ãã³ãã®ã³ã¼ãä¾ãããã¤ã示ãã¾ãã
import React from 'react'; const UserProfile = ({ user }) => { return ( <div> <h2>{user.name}</h2> <p>Email: {user.email}</p> <p>Location: {user.location}</p> </div> ); }; export default UserProfile;
ä¸è¨ã®ã³ã³ãã¼ãã³ãã¯ãä¸ããããã¦ã¼ã¶ã¼ãã¼ã¿ã表示ãã責任ãæã¡ã¾ããä»ã®æ©è½ããã¼ã¿ã®åå¾ã¯è¡ãããåã«åãåã£ãã¦ã¼ã¶ã¼ãã¼ã¿ã表示ããã ãã§ãã
import React from 'react'; const Button = ({ label, onClick }) => { return <button onClick={onClick}>{label}</button>; }; export default Button;
ä¸è¨ã®ã³ã³ãã¼ãã³ãã¯ãä¸ããããã©ãã«ã¨ã¯ãªãã¯ã¤ãã³ããã³ãã©ã«åºã¥ãã¦ãã¿ã³ã表示ãã責任ãæã¡ã¾ãããã¿ã³ã®è¦ãç®ãã¹ã¿ã¤ã«ã«ã¯é¢ä¸ãããåã«ã¯ãªãã¯ã¤ãã³ããéç¥ããå½¹å²ãæããã¦ãã¾ãã
ãããã®ä¾ã¯ãããããç°ãªã責任ãæã¤åä¸ã®Reactã³ã³ãã¼ãã³ãã§ãã
åã³ã³ãã¼ãã³ãã¯ç¹å®ã®æ©è½ã«ç¦ç¹ãå½ã¦ã¦ããããã®å½¹å²ãæç¢ºã«ç¤ºãã¦ãã¾ãããã®ãããªåä¸ã®è²¬ä»»ãæã¤ã³ã³ãã¼ãã³ãã¯ãã³ã¼ãã®çè§£ãä¿å®ããã¹ããåå©ç¨æ§ã®åä¸ã«è²¢ç®ãã¾ãã
注æç¹ãããã¾ãã
ä»ã®ã©ã¤ãã©ãªããã¬ã¼ã ã¯ã¼ã¯ã¨ä½µç¨ããå ´åãReactã³ã³ãã¼ãã³ãã®åä¸ã®è²¬ä»»ãå´©ããå¯è½æ§ãããã¾ãã
ç¹ã«ãjQueryãªã©ã®DOMæä½ã«ç¹åããã©ã¤ãã©ãªã¨çµã¿åãããå ´åã¯ãReactã®ãã£ãã½ãã£ã¼ï¼Philosophyï¼ãåæ¹åãã¼ã¿ããã¼ã®ååã¨ã¯ç°ãªãã¢ããã¼ããåå¨ãã¾ãã
Reactã®ãã£ãã½ãã£ã¼ã¯ãReactã®è¨è¨ååãææ³ãæããã®ã§ããReactã¯ãUIã®æ§ç¯ã¨ç®¡çã容æã«ããããã«ä½ãããJavaScriptã©ã¤ãã©ãªã§ãããã³ã³ãã¼ãã³ãæåãä»®æ³DOM (Virtual DOM)ãåæ¹åãã¼ã¿ããã¼ãUIã¨ãã¸ãã¯ã®åé¢ããããã®ãã£ãã½ãã£ã¼ãæã£ã¦ãã¾ãã
ã¤ã¾ããUIã®æ§ç¯ã¨ç®¡çãç°¡æ½ã§å¹ççãªæ¹æ³ã§è¡ããã¨ã«éç¹ãç½®ãã¦ãããããã«ãããéçºè ã¯æè»ã§ã¹ã±ã¼ã©ãã«ãªã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯ã§ããããã«ãªãã¾ããReactã®ä½¿ç¨æ¹æ³ããã¹ããã©ã¯ãã£ã¹ã«å½±é¿ãä¸ãã¦ãã¾ãã
åå¿è ã®å ´åãReactã®ã³ã³ãã¼ãã³ãã®åä¸ã®è²¬ä»»ã®æ¦å¿µã¨ä»ã®ã©ã¤ãã©ãªã¨ã®çµã¿åããã«é¢ããè¤éãã¯ãæ··ä¹±ãå¼ãèµ·ãããã¨ãããã¾ãã
Reactã®ãã£ãã½ãã£ã¼ããã¹ããã©ã¯ãã£ã¹ã«å¾ã£ã¦ã³ã³ãã¼ãã³ããè¨è¨ãããã¨ãéè¦ã§ãããä»ã®ã©ã¤ãã©ãªããã¬ã¼ã ã¯ã¼ã¯ã¨ã®çµã¿åããã«ããã¦ã¯ãç¶æ³ã«å¿ãã¦åªå é ä½ããã©ã³ã¹ãèæ ®ããå¿ è¦ãããã¾ãã
ä»ã®ã©ã¤ãã©ãªã¨ã®çµã¿åããã¯ãå¦ç¿ã®å¾åãçµé¨ãç©ãã å¾ã«åãçµãã¹ã課é¡ã¨ãªãã¾ããé©åãªã¿ã¤ãã³ã°ã¨çè§£ãæã£ã¦ãä»ã®ã©ã¤ãã©ãªããã¬ã¼ã ã¯ã¼ã¯ãçµã¿åãããã¢ããã¼ããæ¤è¨ãããã¨ã大åã§ãã
ããã¦ããã®ååã¯Reactã®ã¿ãªãããã½ããã¦ã§ã¢è¨è¨ã®ä¸ã§éè¦ãªèãæ¹ã§ãããããã½ããã¦ã§ã¢ã¢ã¼ããã¯ããéçºè ã«ãã£ã¦åºãå®è·µããã¦ãã¾ãã
ã» åå©ç¨æ§ï¼Reusabilityï¼: Reactã³ã³ãã¼ãã³ãã¯ãåå©ç¨å¯è½ã§ããã¹ãã§ãã
Reactã¯ã³ã³ãã¼ãã³ããã¼ã¹ã®ã©ã¤ãã©ãªã§ãããã³ã³ãã¼ãã³ãã¯ç¬ç«ãã¦æ§ç¯ããã¹ããåå©ç¨ã§ãããããåå©ç¨æ§ã®é«ãã³ã¼ãã使ãããã¨ãã§ãã¾ãã
åãæ©è½ãUIãã¿ã¼ã³ãæã¤è¤æ°ã®å ´æã§ä½¿ç¨ã§ããã³ã³ãã¼ãã³ãã使ãããã¨ã§ãéçºå¹çãåä¸ããã¾ãã
ã³ã³ãã¼ãã³ãã®åå©ç¨æ§ã¯ãã³ã¼ãã®å¹ççãªä½æãä¿å®æ§ã®åä¸ãããã³éçºæéã®ç縮ã«å½¹ç«ã¡ã¾ããReactã³ãã¥ããã£ã§ã¯ãåå©ç¨å¯è½ãªã³ã³ãã¼ãã³ãã®ä½æã¨å ±æã«ç¦ç¹ãå½ã¦ãå¤ãã®ããã±ã¼ã¸ãã©ã¤ãã©ãªãå©ç¨å¯è½ã§ãããããããæ´»ç¨ãããã¨ã§å¹ççãªéçºãå¯è½ã¨ãªãã¾ãã
以ä¸ã«ãã«ã¹ã¿ã ããã¯ã使ç¨ããåå©ç¨æ§ã®é«ãåç´ãªã³ã¼ãä¾ã示ãã¾ãã
import React, { useState } from 'react'; // ã«ã¹ã¿ã ãã㯠const useCounter = (initialValue, step) => { const [count, setCount] = useState(initialValue); const increment = () => { setCount(count + step); }; const decrement = () => { setCount(count - step); }; return { count, increment, decrement }; }; const Counter = () => { const { count, increment, decrement } = useCounter(0, 1); return ( <div> <h2>Counter: {count}</h2> <button onClick={increment}>Increment</button> <button onClick={decrement}>Decrement</button> </div> ); }; export default Counter;
ä¸è¨ã®ã³ã¼ãã§ã¯ãuseCounterã¨ããã«ã¹ã¿ã ããã¯ãå®ç¾©ãã¦ãã¾ãããã®ã«ã¹ã¿ã ããã¯ã¯ãã«ã¦ã³ã¿ã¼ã®ç¶æ ã¨æä½ãæä¾ãã¾ãã
useCounterããã¯ã¯ãåæå¤ã¨ã¹ãããã®å¤ãåãåããã«ã¦ã³ã¿ã¼ã®ç¶æ ã¨æä½ãè¿ãã¾ãã
countã¯ã«ã¦ã³ã¿ã¼ã®å¤ãä¿æããincrementã¨decrementã¯ã«ã¦ã³ã¿ã¼ã®å¤ã墿¸ãããããã®é¢æ°ã§ãã
Counterã³ã³ãã¼ãã³ãã§ã¯ãuseCounterããã¯ã使ç¨ãã¦ã«ã¦ã³ã¿ã¼ã®ç¶æ ã¨æä½ãåå¾ãã表示ãã¾ãã
ãã®ã³ã¼ãã§ã¯ãuseCounterã¨ããã«ã¹ã¿ã ããã¯ãå®ç¾©ãããã¨ã§ãã«ã¦ã³ã¿ã¼ã®ç¶æ ã¨æä½ãåå©ç¨å¯è½ãªå½¢ã§æ½è±¡åãã¦ãã¾ãããã®ã«ã¹ã¿ã ããã¯ã¯ä»ã®ã³ã³ãã¼ãã³ãã§ãåå©ç¨ã§ããç°ãªãåæå¤ãã¹ãããå¤ãæå®ãããã¨ãå¯è½ã§ãã
ãã®ããã«ãåå©ç¨æ§ã®é«ãã³ã¼ãã使ãããã¨ã§ãåãæ©è½ãæã¤è¤æ°ã®ã³ã³ãã¼ãã³ãã§ã«ã¦ã³ã¿ã¼ã®ãã¸ãã¯ãåå©ç¨ã§ãã¾ããã¾ããã«ã¹ã¿ã ããã¯ã使ç¨ãããã¨ã§ãã³ã³ãã¼ãã³ããã·ã³ãã«ã§èªã¿ããããªããä¿å®æ§ãåä¸ãã¾ãã
㻠修飾åãã¿ã¼ã³ï¼Modifier Patternï¼: 修飾åãã¿ã¼ã³ï¼Modifier Patternï¼ã¯ãReactã³ã³ãã¼ãã³ãã®ä¸è¬çãªè¨è¨ãã¿ã¼ã³ã§ãã
Reactã«ããã修飾åãã¿ã¼ã³ã¯ãã³ã³ãã¼ãã³ãã®ã¹ã¿ã¤ã«ãæ¯ãèãã夿´ããããã®ã¢ããã¼ãã§ãã
æ¢åã®ã³ã³ãã¼ãã³ãã«å¯¾ãã¦ãç¹å®ã®ä¿®é£¾åã¯ã©ã¹ãããããã£ã追å ãããã¨ã§ãã³ã³ãã¼ãã³ãã®å¤è¦³ãåä½ã夿´ãã¾ãã
ã¾ãã 修飾åãã¿ã¼ã³ã§ã¯ãã³ã³ãã¸ã·ã§ã³ï¼compositionï¼ã®ååãæ´»ç¨ããããã¾ãã
修飾åã³ã³ãã¼ãã³ãã¯ãæ¢åã®ã³ã³ãã¼ãã³ããã©ãããã修飾åã®ã¹ã¿ã¤ã«ãæ©è½ãçµã¿è¾¼ã¿ã¾ããã³ã³ãã¸ã·ã§ã³ãéãã¦ãã³ã³ãã¼ãã³ãã®æ©è½ã®çµã¿åããã容æã«ãªãã¾ãã
ããã«ãããåãã³ã³ãã¼ãã³ããç°ãªãã¹ã¿ã¤ã«ãåä½ã§ä½¿ç¨ã§ããããã«ãªãã¾ãã修飾åãã¿ã¼ã³ã§ã¯ãããããã£ãã¹ãã¼ãã使ç¨ãã¦ã³ã³ãã¼ãã³ãã®å¤è¦³ãæ¯ãèããå¶å¾¡ãã¾ãã
Reactã³ãã¥ããã£ã«ãã£ã¦ä¸è¬çã«æ¡ç¨ããã¦ãããReactã®ã¿ãªããå¤ãã®ã©ã¤ãã©ãªããã¬ã¼ã ã¯ã¼ã¯ã§ãµãã¼ãããã¦ãã¾ãã
ãã ãæ³¨æç¹ã¯ãæè¿ã®Reactã§ã¯é¢æ°ã³ã³ãã¼ãã³ãã¨ããã¯ã®æ®åã«ãã£ã¦ã修飾åãã¿ã¼ã³ãããã³ã³ãã¼ãã³ãã®åæãããã¯ã®ä½¿ç¨ãæ¨å¥¨ããããã¨ãããã¾ãã
ã» åæ¹åãã¼ã¿ããã¼ï¼Unidirectional Data Flowï¼: Reactã§ã¯ããã¼ã¿ããã¼ãåæ¹åã§ãããã¨ãæ¨å¥¨ããã¦ãã¾ãã
åæ¹åãã¼ã¿ããã¼ï¼Unidirectional Data Flowï¼ã¯ãã½ããã¦ã§ã¢ã¢ã¼ããã¯ãã£ã®ä¸ã¤ã§ããããã¼ã¿ãã¢ããªã±ã¼ã·ã§ã³å ã§ä¸æ¹åã«ã®ã¿æµããããã«è¨è¨ãããã¢ããã¼ãã§ãã
ãã®ã¢ã¼ããã¯ãã£ã§ã¯ããã¼ã¿ã®æµãã¯æç¤ºçã§å¶å¾¡å¯è½ãªãã¹ã«å¶ç´ããããã¼ã¿ã®å¤æ´ã¯ç¹å®ã®ãã¿ã¼ã³ã«å¾ã£ã¦è¡ããã¾ãã
ã¤ã¾ããReactã«ããã¦ã¯è¦ªã³ã³ãã¼ãã³ãããåã³ã³ãã¼ãã³ãã¸ã®ãã¼ã¿ã®æµãã¯ãæç¢ºã§äºæ¸¬å¯è½ã§ããã¹ãã§ããããã«ããããã¼ã¿ã®å¤æ´ã®ãã©ããã³ã°ããããã°ã容æã«ãªãã¾ãã
åæ¹åãã¼ã¿ããã¼ã¯ãReactãªã©ã®UIã©ã¤ãã©ãªããã¬ã¼ã ã¯ã¼ã¯ã§åºã使ç¨ããã¦ãããã³ã³ãã¼ãã³ããã¼ã¹ã®ã¢ããªã±ã¼ã·ã§ã³ã®è¨è¨ã«å½¹ç«ã¡ã¾ãã
Reactã«ãããåæ¹åãã¼ã¿ããã¼ã®ã³ã¼ãä¾ãããã¯ï¼Hooksï¼ã使ç¨ãã¦ä»¥ä¸ã«ç¤ºãã¾ãã
import { useState } from 'react'; const Counter = () => { const [count, setCount] = useState(0); const increment = () => { setCount(count + 1); }; const decrement = () => { setCount(count - 1); }; return ( <div> <h2>Counter: {count}</h2> <button onClick={increment}>Increment</button> <button onClick={decrement}>Decrement</button> </div> ); }; export default Counter;
ä¸è¨ã®ã³ã¼ãã¯ãã·ã³ãã«ãªã«ã¦ã³ã¿ã¼ã³ã³ãã¼ãã³ãã示ãã¦ãã¾ãã
countã¨ããã¹ãã¼ã夿°ã使ç¨ããããã®åæå¤ãuseState(0)ã§è¨å®ãã¾ãããã®å¤æ°ã¯ã«ã¦ã³ã¿ã¼ã®å¤ãä¿æãã¦ãã¾ãã
incrementã¨decrementã¨ãã颿°ã¯ãããããã«ã¦ã³ã¿ã¼ã®å¤ãå¢ããã¨æ¸ããããã«ä½¿ç¨ããã¾ãããããã®é¢æ°å ã§setCount颿°ãå¼ã³åºããæ°ããå¤ãè¨å®ãã¾ãã
returnã®ä¸ã§ãcountã®å¤ã表示ããã¾ããã¾ããincrementã¨decrementããã¿ã³ã®onClickã¤ãã³ãã«é¢é£ä»ãããããã¿ã³ãã¯ãªãã¯ãããã¨ãã«å¯¾å¿ãã颿°ãå¼ã³åºããã¾ãã
ãã®ã³ã¼ãã¯åæ¹åãã¼ã¿ããã¼ã®ååã«å¾ã£ã¦ãã¾ãã
countã¯ã¹ãã¼ã夿°ã§ãããsetCount颿°ãä»ãã¦ã®ã¿å¤æ´ããã¾ããã«ã¦ã³ã¿ã¼ã®å¤ã夿´ãããã¨ãåã¬ã³ããªã³ã°ãããªã¬ã¼ããã夿´ãããå¤ã表示ããã¾ãã
ãã®ãããªåæ¹åãã¼ã¿ããã¼ã®ã¢ããã¼ãã«ããããã¼ã¿ã®å¤æ´ã¯æç¤ºçã§å¶å¾¡å¯è½ãªãã¹ãéã£ã¦è¡ããããã¼ã¿ã®å¤æ´ãäºæ¸¬å¯è½ã§è¿½è·¡å¯è½ã«ãªãã¾ãããã¼ã¿ã¯è¦ªã³ã³ãã¼ãã³ãããåã³ã³ãã¼ãã³ãã«ä¼æããåã³ã³ãã¼ãã³ãã¯å¤æ´ãåãåã表示ããããã®ããããã£ï¼propsï¼ã¨ãã¦ä½¿ç¨ãã¾ãã
ã» ç¶æ 管çï¼State Managementï¼: Reactã³ã³ãã¼ãã³ãã§ã¯ãç¶æ 管çãéè¦ãªå½¹å²ãæããã¾ãã
ç¶æ ã¯ãã³ã³ãã¼ãã³ãå ã§ã®ãã¼ã¿ã®ä¿æãUIã®å¤æ´ã«ä½¿ç¨ããã¾ããReactã§ã¯ãã³ã³ãã¼ãã³ãã®ç¶æ ãé©åã«ç®¡çããå¿ è¦ãªå ´åã«ç¶æ ã®æ´æ°ãåã¬ã³ããªã³ã°ãè¡ããã¨ãéè¦ã§ãã
ã» é«ãå¯èªæ§ï¼Readabilityï¼: Reactã³ã³ãã¼ãã³ãã¯ãä»ã®éçºè ãèªåèªèº«ãå¾ã§èªã¿ç´ããéã«ãçè§£ããããå½¢ã§æ¸ãããã¹ãã§ãã
ã³ã³ãã¼ãã³ãã®æ§é ãç®çãæç¢ºã§ãããé©åãªå½åè¦åãã³ã¡ã³ãã使ããã¦ãããã¨ãéè¦ã§ãã
ä¾ãã°ãå¯èªæ§ã®é«ãã³ã¼ãã§ã¯ã夿°ã颿°ã®ååãæå³ãæã¡ããã®ç®çãå½¹å²ãæ£ç¢ºã«è¡¨ç¾ãã¦ãã¾ããé©åãªååã使ç¨ãããã¨ã§ãã³ã¼ãã®æå³ãæç¢ºã«ãªããä»ã®éçºè ãã³ã¼ããèªãã ã¨ãã«ãã°ããçè§£ã§ãã¾ãã
以ä¸ã«ãReactããã¯ã使ç¨ããå¯èªæ§ã®é«ãã³ã¼ãä¾ã示ãã¾ãã
import { useState, useEffect } from 'react'; const UserProfile = () => { const [user, setUser] = useState(null); const [isLoading, setIsLoading] = useState(true); useEffect(() => { // APIããã¦ã¼ã¶ã¼ãã¼ã¿ãåå¾ããéåæé¢æ° const fetchUser = async () => { try { const response = await fetch('https://api.example.com/user'); const data = await response.json(); setUser(data); setIsLoading(false); } catch (error) { console.error('Error fetching user data:', error); } }; fetchUser(); }, []); if (isLoading) { return <div>Loading...</div>; } if (!user) { return <div>User not found.</div>; } return ( <div> <h1>{user.name}</h1> <p>Email: {user.email}</p> <p>Location: {user.location}</p> {/* ... ãã®ä»ã®ã¦ã¼ã¶ã¼ãã¼ã¿ã®è¡¨ç¤º ... */} </div> ); }; export default UserProfile;
ä¸è¨ã®ã³ã¼ãã§ã¯ãUserProfileã³ã³ãã¼ãã³ãããããuserã¨isLoadingã¨ãã夿°åã¯ããã®ç®çãå½¹å²ãæ£ç¢ºã«è¡¨ç¾ãã¦ãã¾ãã
userã¯ã¦ã¼ã¶ã¼ãã¼ã¿ãä¿æããisLoadingã¯ãã¼ã¿ã®èªã¿è¾¼ã¿ç¶æ ã示ãã¦ãã¾ãã
setUserã¨setIsLoadingã¨ãã颿°åã¯ãããããuserã¨isLoadingã¹ãã¼ã夿°ãæ´æ°ããããã®é¢æ°ã§ãããã¨ãæç¢ºã«ç¤ºãã¦ãã¾ãã
fetchUserã¨ãã颿°åã¯ãã¦ã¼ã¶ã¼ãã¼ã¿ãéåæã§åå¾ããããã®é¢æ°ã§ãããã¨ã示ãã¦ãã¾ãã
useEffectããã¯ã®ä¸ã§éåæé¢æ°ãå®ç¾©ããããã®ç®çãå½¹å²ãã³ã¡ã³ãã§èª¬æããã¦ãã¾ããã¾ããã¨ã©ã¼ãã³ããªã³ã°ãè¡ããã¦ãããã¨ã©ã¼ãçºçããå ´åã«ã¯ã³ã³ã½ã¼ã«ã«ã¨ã©ã¼ã¡ãã»ã¼ã¸ãåºåããã¾ãã
isLoadingã®å¤ã«åºã¥ãã¦ããã¼ã¿ã®èªã¿è¾¼ã¿ä¸ãã¨ã©ã¼æã«é©åãªã¡ãã»ã¼ã¸ã表示ããæ¡ä»¶åå²ãè¡ããã¦ãã¾ãã
æçµçã«ãã¦ã¼ã¶ã¼ãã¼ã¿ã表示ããé¨åã§ã¯ãé©åãªHTMLè¦ç´ ãããããã£åã使ç¨ãã¦ãã¦ã¼ã¶ã¼æ å ±ãæç¢ºã«è¡¨ç¤ºãããããã«ãªã£ã¦ãã¾ãã
ãã®ãããªã³ã¼ãã®æ¸ãæ¹ã¯ãå¯èªæ§ãé«ããä»ã®éçºè ãã³ã¼ãã®æå³ãæ©è½ãçè§£ãããããã¾ãã夿°ã颿°ã®å½åãã³ã¡ã³ããã³ã¼ãã®æ§é åãªã©ããããã®è¦ç´ ãæèçã«æ´»ç¨ãããã¨ã§ãã³ã¼ãã®å¯èªæ§ãåä¸ããããã¨ãã§ãã¾ãã
ã³ã¼ãå ã«é©åãªã³ã¡ã³ããããã¥ã¡ã³ãã¼ã·ã§ã³ãåå¨ããå ´åãã³ã¼ãã®çè§£ã容æã«ãªãã¾ãã®ã§æ¨å¥¨ãã¾ãã
ã³ã¡ã³ããããã¥ã¡ã³ãã¼ã·ã§ã³ã¯ãã³ã¼ãã®æå³ãç¹å®ã®ãã¸ãã¯ã®èª¬æãéè¦ãªãã¤ã³ãã®è§£èª¬ãªã©ãè£è¶³æ å ±ãæä¾ãã¾ãã
ãã ããã³ã¡ã³ããããã¥ã¡ã³ãã¼ã·ã§ã³ã¯ã³ã¼ãèªä½ãæç¢ºã§ãããã¨ãåæã¨ãã¦ãããããã³ã¼ãã®å¯èªæ§ãåä¸ãããè£å®çãªææ®µã¨ãã¦ä½¿ç¨ãããã¹ãã§ãã
ãããã®åºæ¬ååãéµå®ãããã¨ã§ãReactã³ã³ãã¼ãã³ãã®è¨è¨ã¨éçºãã¹ã ã¼ãºã«ãªããä¿å®æ§ãæ¡å¼µæ§ã®é«ãã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯ãããã¨ãã§ããããã«ãªãã§ãããã
UIï¼ã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ï¼
Reactã«ãããUIã¨ã¯ãã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ï¼User Interfaceï¼ã®ãã¨ãæãã¾ãã
UIã¯ãã¦ã¼ã¶ã¼ãã¢ããªã±ã¼ã·ã§ã³ãã¦ã§ããµã¤ãã¨å¯¾è©±ããããã®ã°ã©ãã£ã«ã«ãªè¦ç´ ãæä½æ¹æ³ãå«ãã§ãã¾ãã
ããã«ã¯ããã¿ã³ããã©ã¼ã ãããã²ã¼ã·ã§ã³ã¡ãã¥ã¼ãããã¹ããã£ã¼ã«ããªã©ã®ã³ã³ãã¼ãã³ããå«ã¾ãã¾ãã
Reactã¯ãã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ãæ§ç¯ããããã®JavaScriptã©ã¤ãã©ãªã§ãããã³ã³ãã¼ãã³ããã¼ã¹ã®ã¢ããã¼ããæ¡ç¨ãã¦ãã¾ãã
Reactã³ã³ãã¼ãã³ãã¯ãåå©ç¨å¯è½ãªUIã®ä¸é¨ã§ãããããããã®ã³ã³ãã¼ãã³ãã¯ç¬èªã®ããããã£ï¼propsï¼ãç¶æ ï¼stateï¼ãæã¤ãã¨ãã§ãã¾ãã
UIãã¶ã¤ã³ã¯ãã¦ã¼ã¶ã¼ãã¢ããªã±ã¼ã·ã§ã³ã使ãããããé åçãªãã®ã¨ããããã«UIè¦ç´ ã®é ç½®ãè²ãããã¹ãã®ã¹ã¿ã¤ã«ãã¢ãã¡ã¼ã·ã§ã³ãªã©ãèæ ®ãã¦è¡ããã¾ãã
UIãã¶ã¤ã³ã¯ãã¦ã¼ã¶ã¼ã¨ã¯ã¹ããªã¨ã³ã¹ï¼User Experienceï¼ã®ä¸é¨ã¨ãã¦ãã¦ã¼ã¶ã¼ãã¢ããªã±ã¼ã·ã§ã³ã¨ã®å¯¾è©±ãéãã¦å¾ãå ¨ä½çãªä½é¨ãæ¹åããããã«éè¦ãªè¦ç´ ã§ãã
ã¾ãããã¶ã¤ãã¼ãéçºè ãå ±åã§åãçµããã¨ãå¤ããReactã§ã¯ãã¶ã¤ãã¼ãã³ã³ãã¼ãã³ãã®å¤è¦³ãã¹ã¿ã¤ã«ãè¨è¨ããéçºè ããããReactã³ã³ãã¼ãã³ãã«å®è£ ãããã¨ãä¸è¬çã§ãã
ããã«ã¯ãã¬ã¤ã¢ã¦ããã«ã©ã¼ãã¬ããããã©ã³ãã®é¸æãã¢ã¤ã³ã³ã®ä½¿ç¨ãªã©ãå«ã¾ãã¾ãã
ã¦ã¼ã¶ããªãã£ãè¦è¦çãªä¸è²«æ§ã«é¢ããã¬ã¤ãã©ã¤ã³ãå¦ã¶ã¨è¯ãã§ãããã
UXï¼ã¦ã¼ã¶ã¼ã¨ã¯ã¹ããªã¨ã³ã¹ï¼
Reactã«ãããUXï¼ã¦ã¼ã¶ã¼ã¨ã¯ã¹ããªã¨ã³ã¹ï¼ãã¶ã¤ã³ã¯ãã¦ã¼ã¶ã¼ãã¢ããªã±ã¼ã·ã§ã³ãã¦ã§ããµã¤ãã使ç¨ããéã®ç·åçãªä½é¨ãåä¸ãããããã«è¡ãããè¨è¨ã®ä¸é¨ã§ãã
UXãã¶ã¤ã³ã¯ãã¦ã¼ã¶ã¼ãã¢ããªã±ã¼ã·ã§ã³ã¨å¯¾è©±ããéã®ä½¿ãããããå¹çæ§ãæºè¶³åº¦ãåä¸ããããã¨ãç®æãã¦ãã¾ãã
ã¦ã¼ã¶ã¼ã®ãã¼ãºãè¦æ±ãçè§£ããããã«åºã¥ãã¦ã¢ããªã±ã¼ã·ã§ã³ã®æ©è½ãæ§é ãã¯ã¼ã¯ããã¼ãè¨ç»ã»è¨è¨ãã¾ãã
Reactã«ããã¦ã¯ãUIã³ã³ãã¼ãã³ãã®é ç½®ãæ¯ãèããããã²ã¼ã·ã§ã³ã®ä½¿ãåæãæ å ±ã®æ´çã¨è¡¨ç¤ºæ¹æ³ãªã©ãUXãã¶ã¤ã³ã®ä¸ç°ã¨ãã¦èæ ®ããã¾ãã
ããã¯ãã¦ã¼ã¶ã¼ã®è¦ç¹ã«ç«ã¡ãç´æçã§ä½¿ããããã¤ã³ã¿ã¼ãã§ã¼ã¹ãæä¾ãããã¨ãéè¦ãã¾ãã
ä¾ãã°ãã¦ã¼ã¶ã¼ãªãµã¼ããã¦ã¼ã¶ã¼ã¹ãã¼ãªã¼ããªã³ã°ãã¦ã¼ã¶ã¼ãã¹ããªã©ã®ææ³ãç¨ãã¦ãã¦ã¼ã¶ã¼ã®ãã¼ãºãè¡åãã¿ã¼ã³ãææ¡ãããã®æ å ±ã«åºã¥ãã¦ã¢ããªã±ã¼ã·ã§ã³ã®è¨è¨ãæ¹åãè¡ãã¾ãã
UIãã¶ã¤ã³ã¨UXãã¶ã¤ã³ã¯å¯æ¥ã«é¢é£ãã¦ãããä¸ç·ã«åãçµããã¨ã§åªããã¦ã¼ã¶ã¼ã¨ã¯ã¹ããªã¨ã³ã¹ãæä¾ãããã¨ãã§ãã¾ãã
UIãã¶ã¤ã³ã¯å¤è¦³ãã¹ã¿ã¤ã«ã«ç¦ç¹ãå½ã¦ãã®ã«å¯¾ããUXãã¶ã¤ã³ã¯ã¦ã¼ã¶ã¼ã®å ¨ä½çãªä½é¨ãç®æ¨éæãèæ ®ãã¾ãã
ã¦ã¼ã¶ã¼ä¸å¿ã®è¨è¨ãã¦ã¼ã¶ã¼ã¨ã¯ã¹ããªã¨ã³ã¹ã®åä¸ã«é¢ããæ å ±ãå¦ã¶ãã¨ãéè¦ã§ãã
UIã®ãã¶ã¤ã³ã«å½¹ç«ã¤React ã³ã³ãã¼ãã³ãã©ã¤ãã©ãª
Reactã³ã³ãã¼ãã³ãã©ã¤ãã©ãªã®ä¸çã¯åºç¯å²ã§ãçµ¶ããå¤åãã¦ãã¾ããæ°å¤ãã®ãªãã·ã§ã³ããããç¹å®ã®ããã¸ã§ã¯ãã«æé©ãªã©ã¤ãã©ãªãé¸ã¶ã®ã¯å°é£ã§ãã
åå¿è ã®æ¹ã«å½¹ç«ã¤äººæ°ã®é«ãã©ã¤ãã©ãªãããã¤ãç´¹ä»ãã¾ãã
ããããç´¹ä»ããã©ã¤ãã©ãªã¯ããªãããªã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ãå®ç¾ããããã®ä½¿ããããã³ã³ãã¼ãã³ããæä¾ãã¦ãã¾ããããã«ãããã¦ã¼ã¶ã¼ã¨ã¯ã¹ããªã¨ã³ã¹ã®åä¸ãéçºå¹çã®åä¸ãæå¾ ã§ãã¾ãã
UIãã¶ã¤ã³ã«é常ã«ä¾¿å©ã§ãã
React Material UI
MUI: The React component library you always wanted
React Material UIï¼ã¾ãã¯åã«Material UIã¨ãå¼ã°ãã¾ãï¼ã¨MUIï¼ã¾ãã¯MUI Coreã¨ãå¼ã°ãã¾ãï¼ã¯åãã©ã¤ãã©ãªãæãã¦ãã¾ãã
Googleã®Material Designããã¼ã¹ã«ãããReactç¨ã®UIã³ã³ãã¼ãã³ãã©ã¤ãã©ãªã§ããMUIã¯ãã®ç¥ç§°ã§ãããReact Material UIã®å¥åã¨ãã¦ä½¿ç¨ããã¾ãã
Material UIã¯é常ã«äººæ°ã®ããReactã³ã³ãã¼ãã³ãã©ã¤ãã©ãªã§ãããéçºè ã«åºç¯å²ãªãã¼ã«ã»ãããæä¾ãã¦æ°ããæ©è½ãè¿ éã«ä½æãã¦ãããã¤ãããã¨ãã§ãã¾ãã
Googleã®ãããªã¢ã«ãã¶ã¤ã³ã¬ã¤ãã©ã¤ã³è¨èªã«åºã¥ãã¦æ§ç¯ããã¦ããã¾ãã
ãã®ãã¶ã¤ã³è¨èªã¯ç´æçã§ä¸è²«æ§ããããç¾ããã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ã®ä½æã«éç¹ãç½®ãã¦ãã¾ãã
ã¾ããã¢ã¯ã»ã·ããªãã£ã¨å¿çæ§ãéè¦ããã¦ãã¾ãã
Material UIã«ã¯ãã¾ãã¾ãªã«ã¹ã¿ãã¤ãºå¯è½ãªã³ã³ãã¼ãã³ããå«ã¾ãã¦ããããã¿ã³ãã«ã¼ãããã¤ã¢ãã°ããã©ã¼ã ãã°ãªããããªã¹ããã¡ãã¥ã¼ãã¹ã©ã¤ãã¼ãã¹ã¤ãããã¿ããããã¹ããã£ã¼ã«ããã¿ã¤ãã°ã©ãã£ãªã©ãããã¾ãã
ã¾ããä»ã®ãã¼ã«ã¨ã®çµ±åãå¼·åã§ãããReduxãApolloã¯ã©ã¤ã¢ã³ããªã©ã¨çµ±åãããã¨ãã§ãã¾ããããã«ããµã¼ãã¼ãµã¤ãã¬ã³ããªã³ã°ããµãã¼ããã¦ãããããã©ã¼ãã³ã¹ã®åä¸ã«ãå½¹ç«ã¡ã¾ãã
ç·ãã¦ãMaterial UIã¯Reactéçºè ã«ã¨ã£ã¦é常ã«ä¾¿å©ãªãã¼ã«ã§ãããé åçãªã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ãçæéã§æ§ç¯ããããã®åªãã鏿è¢ã§ãã
React-Bootstrap
React Bootstrap | React Bootstrap
React-Bootstrapã¯ãReactã³ãã¥ããã£ã«ãã£ã¦éçºã¨ã¡ã³ããã³ã¹ãè¡ããã¦ãã¾ãã
æåã®ãã¼ã¸ã§ã³ã¯ãTwitterã®Bootstrapãã¼ã ã«ãã£ã¦éçºããã¾ããããç¾å¨ã¯Reactã³ãã¥ããã£ã«ãã£ã¦ç®¡çããã¦ãã¾ãã
React-Bootstrapã¯ãReactã®å ç¢æ§ã¨Bootstrapã®åºç¯å²ãªUIã³ã³ãã¼ãã³ãã©ã¤ãã©ãªãçµã¿åããã人æ°ã®ãããªã¼ãã³ã½ã¼ã¹ã©ã¤ãã©ãªã§ãããã®çµã¿åããã«ãããéçºè ã¯ç°¡åã«é åçã§å¿çæ§ã®é«ãã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ããã¶ã¤ã³ãããã¨ãã§ãã¾ãã
React-Bootstrapã¯Reactã¨ã·ã¼ã ã¬ã¹ã«çµ±åããã¦ããã両æ¹ã®ã©ã¤ãã©ãªã®é·æãæ´»ããã¦ãã¾ãã
Reactã®ã³ã³ãã¼ãã³ããã¼ã¹ã®ã¢ã¼ããã¯ãã£ã¨Bootstrapã®ã¢ã¸ã¥ã©ã¼UIã³ã³ãã¼ãã³ããçµã¿åããããã¨ã§ãã³ã¼ãã®åå©ç¨æ§ã¨ä¿å®æ§ã確ä¿ããªããUIéçºã«éä¸ã§ãã¾ãã
ãã®ã©ã¤ãã©ãªã«ã¯ãåºæ¬çãªè¦ç´ ããè¤éãªã³ã³ãã¼ãã³ãã¾ã§ãå¤ãã®UIã³ã³ãã¼ãã³ããå«ã¾ãã¦ãã¾ãã
åã³ã³ãã¼ãã³ãã¯å¿çæ§ãèæ ®ãã¦è¨è¨ããã¦ããããããã¾ãã¾ãªç»é¢ãµã¤ãºãããã¤ã¹ã«ç°¡åã«é©å¿ã§ãã¾ãã
ã¾ããReact-Bootstrapã®ã³ã³ãã¼ãã³ãã¯ã«ã¹ã¿ãã¤ãºã容æã§ãããã¢ããªã±ã¼ã·ã§ã³ã®è¨è¨è¦ä»¶ã«åããã¦å¤è¦³ã¨åä½ã調æ´ãããã¨ãã§ãã¾ãã
CSSã¯ã©ã¹ããã¼ããªãã·ã§ã³ã®ãµãã¼ããå©ç¨ãã¦ãããã©ã«ãã¹ã¿ã¤ã«ã®ã«ã¹ã¿ãã¤ãºãç¬èªã®ãã¸ã¥ã¢ã«ã¢ã¤ãã³ãã£ãã£ãå®ç¾ãããã¨ãã§ãã¾ãã
React-Bootstrapã¯ã¢ãã¤ã«ãã¡ã¼ã¹ãã®ã¢ããã¼ããæ¡ç¨ãã¦ãããã¢ãã¤ã«ããã¤ã¹ã¨ã¬ã¹ãã³ã·ãWebãã¶ã¤ã³ã«åªããå¯¾å¿æ§ãæã£ã¦ãã¾ãã
ãã®ãããã©ã¤ãã©ãªã®ã³ã³ãã¼ãã³ãã¯ãã¾ãã¾ãªç»é¢ãµã¤ãºã«æè»ã«é©å¿ãããããæåã§å¿çæ§ã³ã¼ãã£ã³ã°ãè¡ãå¿ è¦ãããã¾ããã
ãã¹ã¯ããããã¿ãã¬ãããã¹ãã¼ããã©ã³ã§æé©ãªã¦ã¼ã¶ã¼ã¨ã¯ã¹ããªã¨ã³ã¹ãæä¾ãã¾ãã
Fluent UI
ã¾ããReact Fluent UIã«ã¯2ã¤ã®ãã¼ã¸ã§ã³ãããã¾ãã
以åã¯ï¼Office UI Fabricï¼ã¨å¼ã°ãã¦ãããã¼ã¸ã§ã³1ï¼v1ï¼ã¨ãç¾å¨ã®ãã¼ã¸ã§ã³ã§ããFluent UIï¼v2ï¼ã§ãã
ãã¼ã¸ã§ã³1ï¼v1ï¼ã®ï¼Office UI Fabricï¼ã¯ãMicrosoft Office製åã®ãã¶ã¤ã³è¨èªã§ããFluent Design Systemã«åºã¥ãã¦ä½ãããReactã³ã³ãã¼ãã³ãã©ã¤ãã©ãªã§ããã
䏿¹ãFluent UIï¼v2ï¼ã¯ãv1ã®æ¹è¯çã§ãããããæ´ç·´ããããã¶ã¤ã³ãããã©ã¼ãã³ã¹ã®åä¸ãæ°ããæ©è½ãªã©ã追å ããã¦ãã¾ãã
Fluent UIï¼v2ï¼ã¯ãMicrosoftã®ãã¶ã¤ã³ã¬ã¤ãã©ã¤ã³ã«æºæ ããReactã³ã³ãã¼ãã³ãã©ã¤ãã©ãªã§ãããå¹ åºãã¢ããªã±ã¼ã·ã§ã³ãWebãµã¤ãã®éçºã«ä½¿ç¨ãããã¨ãã§ãã¾ãã
ãããã£ã¦ãReact Fluent UIã«ã¯v1ã¨v2ã®2ã¤ã®ç°ãªããã¼ã¸ã§ã³ãåå¨ããéçºè ã¯ããããã®ãã¼ã¸ã§ã³ã使ã£ã¦UIã³ã³ãã¼ãã³ãã使ãããã¨ãã§ãã¾ãã
Fluentã¯ã·ã³ãã«ãã¨åå©ç¨æ§ãéè¦ãã¦ãããReactããã¸ã§ã¯ãã¨ã·ã¼ã ã¬ã¹ã«çµ±åã§ããäºåè¨è¨ãããã³ã³ãã¼ãã³ããåºã«æä¾ãã¦ãã¾ããFluentã®ä¸»è¦ãªã³ã³ãã¼ãã³ãã¨æ©è½ã«ç¦ç¹ãå½ã¦ãéçºè ãç¾ããç´æçãªã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ã容æã«ä½æã§ããæ¹æ³ã示ãã¦ãã¾ãã
Fluentã¯å¹ åºãUIãã¼ãºã«å¯¾å¿ããåå©ç¨å¯è½ãªã³ã³ãã¼ãã³ãã®åºç¯å²ãªã³ã¬ã¯ã·ã§ã³ãæä¾ãã¦ãã¾ããåºæ¬çãªè¦ç´ ããè¤éãªã³ã³ãã¼ãã³ãã¾ã§ããã¹ã¦ãã«ãã¼ãã¦ãããã¢ããªã±ã¼ã·ã§ã³å ¨ä½ã§ä¸è²«æ§ã®ããæ´ç·´ãããå¤è¦³ãæä¾ãã¾ãã
ã¾ããFluentã¯ã¢ã¯ã»ã·ããªãã£ãéè¦ãã¦ããããã¼ãã¼ãããã²ã¼ã·ã§ã³ãARIA屿§ããã©ã¼ã«ã¹ç®¡çã®ãµãã¼ããæä¾ãã¦ãã¾ããããã«ãå½éåï¼i18nï¼æ©è½ãåãã¦ãããè¤æ°ã®è¨èªã«å¯¾å¿ããã¢ããªã±ã¼ã·ã§ã³ã®ä½æã容æã«ãã¾ãã
ã¾ããFluentã®æè»ãªãã¼ãã¨ã¹ã¿ã¤ã«ã·ã¹ãã ãç¹å¾´çã§ãã
CSS-in-JSã¢ããã¼ããæ¡ç¨ãã¦ãããJavaScriptã¾ãã¯TypeScriptã使ç¨ãã¦Reactã³ã³ãã¼ãã³ãå ã§ã¹ã¿ã¤ã«ãå®ç¾©ã§ãã¾ãã
ãã¾ãã¾ãªã¹ã¿ã¤ã«ã½ãªã¥ã¼ã·ã§ã³ããµãã¼ããã¦ãããããã¸ã§ã¯ãã«æé©ãªã¢ããã¼ãã鏿ã§ãã¾ãã
ãã¼ãã®æ©è½ãæ´»ç¨ãããã¨ã§ãä¸è²«ããè¦è¦çãªãã©ã³ãã£ã³ã°ãå®ç¾ããã¦ã¼ã¶ã¼ã¨ã¯ã¹ããªã¨ã³ã¹ã®ä¸è²«æ§ã確ä¿ã§ãã¾ãã
Fluentã¯ãç¾ããç´æçãªã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ã容æã«ä½æããããã®å¼·åãªãã¼ã«ã§ãããéçºè ã«å¤ãã®ä¾¿å©ãªæ©è½ã¨æè»æ§ãæä¾ãã¾ãã
ããããã®ããã¸ã§ã¯ãã®ãã¼ãºã¨è¦ä»¶ã«åºã¥ãã¦ãFluentã鏿ãããã©ãããæ¤è¨ãã価å¤ãããã¾ãã
Chakra UI
Chakra UIã¯Chakra UIãã¼ã ã«ãã£ã¦æä¾ããã¦ãã¾ãã
Chakra UI Reactã¯ãChakra UIãã¼ã ã«ãã£ã¦éçºãããChakra UIã®Reactç¨ã®å®è£ ã§ãã
Chakra UIã¯ã¨ã¬ã¬ã³ããªãã¶ã¤ã³ãã·ã¼ã ã¬ã¹ãªçµ±åãåºç¯å²ãªæ©è½ã»ãããåããä¿¡é ¼ã§ãã鏿è¢ã§ãããå æ¬çã§ã¦ã¼ã¶ã¼ãã¬ã³ããªã¼ãªã¤ã³ã¿ã¼ãã§ã¼ã¹ã®æ§ç¯ããµãã¼ããã¦ãã¾ãã
ããã¦ãäºåã«ã¹ã¿ã¤ã«è¨å®ãããã³ã³ãã¼ãã³ãã使ç¨ãã¦ç°¡åã«ã«ã¹ã¿ãã¤ãºã§ããå ç¢ãªãã¼ãã·ã¹ãã ãéãã¦ä¸è²«æ§ã®ãããã¶ã¤ã³ãå®ç¾ã§ãã¾ããã¾ããã¬ã¹ãã³ã·ããã¶ã¤ã³æ©è½ãçµã¿è¾¼ã¾ãã¦ããããã¾ãã¾ãªç»é¢ãµã¤ãºãããã¤ã¹ã§åªããè¦ãç®ãæä¾ãã¾ãã
ãã ããChakra UIã¯ç¹æã®ã¢ããã¼ããæã£ã¦ããããããã¹ã¦ã®éçºè ã®å¥½ã¿ã«åããªãå ´åãã«ã¹ã¿ãã¤ãºã«è¿½å ã®å´åãå¿ è¦ãªå ´åãããã¾ãã
ã¾ããå æ¬çãªæ©è½ã»ããã«ããããã³ãã«ãµã¤ãºã大ãããªãå¯è½æ§ãããã¾ããããã¸ã§ã¯ãã®ãã¼ãºã¨ãã¬ã¼ããªããèæ ®ãã¦Chakra UIã鏿ããåã«æ¤è¨ãããã¨ãéè¦ã§ãã
çµè«ã¨ãã¦ãChakra UIã¯ã¢ã¯ã»ã·ããªãã£ããã¼ãæ©è½ãã¬ã¹ãã³ã·ããã¶ã¤ã³ãµãã¼ããéè¦ãããã¦ã¼ã¶ã¼ä¸å¿ã®å¼·åãªé¸æè¢ã§ãã
Semantic UI React
Semantic UI Reactã¯ãSemantic UIã®Reactç¨ã®å ¬å¼ããã±ã¼ã¸ã§ãã
Semantic UIã¯æåã«JavaScriptã¨jQueryã使ç¨ãã¦ä½æããã¾ããããSemantic UI Reactã¯Reactã³ã³ãã¼ãã³ãã¨ãã¦æä¾ããã¦ãã¾ãã
ããã«ãããReactãã¼ã¹ã®ããã¸ã§ã¯ãã§Semantic UIã®ã³ã³ãã¼ãã³ããå©ç¨ã§ãã¾ãã
Semantic UI Reactã¯ãCSSã®ä»£ããã«SCSSã¹ã¿ã¤ã«ã·ã¼ãã使ç¨ããReactã®å¼·åãªããã³ãã¨ã³ãã©ã¤ãã©ãªã§ãã
SCSSã¯å¹ççã§é«éãªã¹ã¿ã¤ãªã³ã°ãå¯è½ã«ããå ç¢ã§é åçãªã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ã®ä½æã容æã«ãã¾ãã
ãã®ã©ã¤ãã©ãªã«ã¯50以ä¸ã®ã³ã³ãã¼ãã³ããå«ã¾ãã¦ãããéçºè ã«è±å¯ãªãªãã·ã§ã³ãæä¾ãã¾ãã
ã¾ããã¬ã¹ãã³ã·ããã¶ã¤ã³ãHTMLã«å¯¾å¿ããã³ã¼ãã£ã³ã°ãjQueryã使ç¨ããªãReactã¨ã®äºææ§ãªã©ã®æ©è½ãåãã¦ãã¾ããããã«ãSemantic UI Reactã¯ãªã¼ãã³ã½ã¼ã¹ã§ãããGitHubã§äººæ°ãããã¾ãã
Semantic UI Reactã®ä½¿ç¨ã¯ç°¡åã§ãããããã±ã¼ã¸ã®ã¤ã³ã¹ãã¼ã«ã¨å¿ è¦ãªã³ã³ãã¼ãã³ãã®ã¤ã³ãã¼ããè¡ãã ãã§ãã
ã¾ããSemantic UI Reactã使ç¨ããããã«ãnpmãyarnã使ã£ã¦ããã±ã¼ã¸ãã¤ã³ã¹ãã¼ã«ãã¾ãã
npm install semantic-ui-react // or yarn add semantic-ui-react
ãã®å¾ãSCSS夿°ãããã¯ã¹ã¤ã³ã使ç¨ãã¦ã³ã³ãã¼ãã³ããã«ã¹ã¿ãã¤ãºãããã¨ãã§ãã¾ããã¾ããçµã¿è¾¼ã¿ã®ãã¼ãã使ç¨ãã¦ãã³ã¼ããæ¸ããã«é åçãªã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ãè¿ éã«ä½æãããã¨ãã§ãã¾ãã
import { Button, Icon } from 'semantic-ui-react'; const MyButton = () => { return ( <Button primary> <Icon name='user' /> ãã°ã¤ã³ </Button> ); } export default MyButton;
ä¸è¨ã®ããã«ãSemantic UI Reactã®ã³ã³ãã¼ãã³ãã¯ãã·ã³ãã«ãªJavaScriptãªãã¸ã§ã¯ãã¨ãã¦ããããã£ã渡ããã¨ã§ãè¦ãç®ãåä½ãã«ã¹ã¿ãã¤ãºã§ãã¾ãã
Semantic UI Reactã¯ãä»ã®äººæ°ã®ããã©ã¤ãã©ãªã§ããMaterial UIãReact-Bootstrapã¨æ¯è¼ãã¦ãç¬èªã®å¤è¦³ã¨å¹ åºãã³ã³ãã¼ãã³ãã®å©ç¨å¯è½æ§ã§éç«ã£ã¦ãã¾ãã
ãã ããããã¤ãã®æ¬ ç¹ãããã¾ãã
ä¾ãã°ãä»ã®ç«¶åã©ã¤ãã©ãªã¨æ¯è¼ãã¦ã«ã¹ã¿ãã¤ãºãªãã·ã§ã³ãå°ãªãã¨ããæè¦ããä¸é¨ã®ã³ã³ãã¼ãã³ããååã«ææ¸åããã¦ããªãã¨ããå ±åãããã¾ãã
ãããã£ã¦ãå¦ç¿ã®éã«ã¯ããã¥ã¡ã³ãã®ä¸è²«æ§ã詳細ãã«ã¤ãã¦æ³¨æãå¿ è¦ã§ãã
ããã¥ã¡ã³ãã®ä¸è¶³ã¯ãå¦ç¿ãéçºããã»ã¹ã®é害ã«ãªãå¯è½æ§ããããããéçºè ã¯ããã¥ã¡ã³ãã®å å®åº¦ãèæ ®ãã¦ã©ã¤ãã©ãªã鏿ããéã«å¸¸ã«æ³¨æããå¿ è¦ãããã¾ãã
Ant Design React
Ant Design - The world's second most popular React UI framework
Ant Design Reactã¯ãReact.jsã使ç¨ãã¦ã¤ã³ã¿ã©ã¯ãã£ããªã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ãæ§ç¯ããããã®UIã©ã¤ãã©ãªã§ãã
ãã®ã©ã¤ãã©ãªã¯ããªããã§ã¦ã¼ã¶ã¼ãã¬ã³ããªã¼ãªã¨ã¯ã¹ããªã¨ã³ã¹ã使ããã®ã«å½¹ç«ã¤å¹ åºãã³ã³ãã¼ãã³ãã»ãããæä¾ãã¾ãã
Ant Design Reactã¯ãã¢ã¯ã»ã·ããªãã£ã«åªããWebã¢ã¯ã»ã·ããªãã£ã¬ã¤ãã©ã¤ã³ã«æºæ ããããã«è¨è¨ããã¦ãã¾ããã¾ããTypeScriptã§è¨è¿°ããã¦ãããããã³ã¼ãã®ä½¿ç¨ã¨ä¿å®ã容æã§ãã
ããã«ãæ¡å¼µæ§ããããéçºè ã¯ã¢ããªã±ã¼ã·ã§ã³ã®æ¡å¼µãæè»ã«è¡ããã¨ãã§ãã¾ãã
æ©è½ã®é¢ã§ã¯ãAnt Design Reactã«ã¯ãã©ã¼ã ããã¿ã³ãã°ãªãããã¢ã¤ã³ã³ãã¡ãã¥ã¼ããã¼ãã«ãªã©ã®å¹ åºãã³ã³ãã¼ãã³ããå«ã¾ãã¦ãã¾ãã
ãããã®ã³ã³ãã¼ãã³ãã«ãããUIã®ä½æããã»ã¹ãç°¡ç´ åããã大éã®ã³ã¼ããæåãã使ããå¿ è¦ãããã¾ãããããã«ãå½éåï¼i18nï¼ã®ãµãã¼ããåãã£ã¦ãããã¢ããªã±ã¼ã·ã§ã³ãç°¡åã«å¤è¨èªå¯¾å¿ãå®ç¾ããããã®æ©è½ãæä¾ãã¦ãã¾ãã
Ant Design Reactã®å©ç¹ã®1ã¤ã¯ã使ããããã§ãã
ç´æçãªAPIãæä¾ãã¦ãããããéçºè ã¯çæéã§ã©ã¤ãã©ãªã使ãå§ãããã¨ãã§ãã¾ããã¾ããå æ¬çã§ããããããããã¥ã¡ã³ããæä¾ããã¦ãããããæ°ããã¦ã¼ã¶ã¼ãããã«å§ãããã¨ãã§ãã¾ãã
ãããã®ã©ã¤ãã©ãªãç·ãã¦ã¾ã¨ãã¾ãã
Material-UIã¯Googleã®ãããªã¢ã«ãã¶ã¤ã³ã®ååã«åºã¥ããã³ã³ãã¼ãã³ããæä¾ãã¦ãããè¦æ ãã®è¯ãã¤ã³ã¿ã¼ãã§ã¼ã¹ãç°¡åã«ä½æã§ãã¾ãã
ã¾ããBootstrapãSemantic UIãå¹ åºãã¹ã¿ã¤ãªã³ã°ãªãã·ã§ã³ã¨åå©ç¨å¯è½ãªã³ã³ãã¼ãã³ããæä¾ãã¦ããããã¶ã¤ã³ã®èªç±åº¦ãé«ãã§ãã
ããã«ãAnt DesignãChakra UIã¯ã¢ãã³ãªãã¶ã¤ã³ã¨ãã¯ãã«ãªæ©è½ãåããã³ã³ãã¼ãã³ããæä¾ãã¦ãã¾ãããããã®ã©ã¤ãã©ãªã¯ã«ã¹ã¿ãã¤ãºæ§ã«åªãã¦ãããç¬èªã®ãã¶ã¤ã³ã·ã¹ãã ãæ§ç¯ããæ¹åãã«é©ãã¦ãã¾ãã
æå¾ã«
Reactã«ãããã³ã³ãã¼ãã³ãã®åºæ¬ååã¯ãåä¸ã®è²¬ä»»ã«éä¸ãããã¨ãéè¦ã§ããã¤ã¾ããåã³ã³ãã¼ãã³ãã¯ç¹å®ã®å½¹å²ãæããããã®è²¬åã«ç¦ç¹ãå½ã¦ãã¹ãã§ãã
ã¾ããåå©ç¨å¯è½ã§ç¬ç«æ§ã®é«ãã³ã³ãã¼ãã³ãã使ãããã¨ãéè¦ã§ããããã«ãããåãã³ã³ãã¼ãã³ããä»ã®å ´æã§ãåå©ç¨ã§ããã³ã¼ãã®ä¿å®æ§ãåä¸ãã¾ãã
ããã«ãã³ã³ãã¼ãã³ããé層çã«æ§ç¯ãããã¨ãéè¦ã§ããã¤ã¾ããå°ããªã³ã³ãã¼ãã³ããçµã¿åããã¦å¤§ããªã³ã³ãã¼ãã³ããä½ããã¨ã§ãè¤éãªUIã广çã«ç®¡çã§ãã¾ãã
æå¾ã«ãç¶æ 管çãé©åã«è¡ããã¨ã大åã§ããReactã§ã¯ãç¶æ ã使ç¨ãã¦ã³ã³ãã¼ãã³ãã®åä½ã表示ãå¶å¾¡ãã¾ããããã«ãããã¦ã¼ã¶ã¼ã®æä½ããã¼ã¿ã®å¤æ´ã«å¿ãã¦ã³ã³ãã¼ãã³ããæ´æ°ã§ãã¾ãã
ãããã®ååãå®ããã¨ã«ãã£ã¦ã广çãªReactã³ã³ãã¼ãã³ãã使ããä¿å®æ§ãåå©ç¨æ§ãåä¸ããããã¨ãã§ãã¾ãã
Reactã§ã®UIãã¶ã¤ã³ã®ä¸çã«ã¯ãéçºè ãé åçãªã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ããæ¹æ³ã«é©å½ãããããããåªããè³ç£ã©ã¤ãã©ãªãæ°å¤ãåå¨ãã¾ãã
React Material UIãChakra UIãAnt Designãªã©ã¯ãç°¡ç´ åãããUIè¨è¨ããã»ã¹ã¨é«ãçç£æ§ãæä¾ããå¼·åãªãã¼ã«ã¨ã³ã³ãã¼ãã³ãã§ãã
ãããã®ã©ã¤ãã©ãªã¯ãæ´»æ°ã«æºã¡ãã³ãã¥ããã£ã«ãã£ã¦é²åãç¶ããç¾ããã·ã¼ã ã¬ã¹ã§å¿çæ§ã®é«ãUIã使ããããã«ä¸å¯æ¬ ãªè³ç£ã¨ãªã£ã¦ãã¾ãã
ãã ããUIã©ã¤ãã©ãªã使ç¨ããéã«ã¯ãããã¤ãã®æ½å¨çãªæ¬ ç¹ããããã¨ãè¦ãã¦ããã¹ãã§ãã
ãã¨ãã°ãç¹å®ã®ã³ã³ãã¼ãã³ããã«ã¹ã¿ãã¤ãºã§ããªãå ´åããç¹å®ã®ãã¼ãºãæºãããªãå ´åãããã¾ãã
ãã®ãããä¸é¨ã®ã¦ã¼ã¶ã¼ã¯ãã¢ããªã±ã¼ã·ã§ã³ã®ã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¼ã¹ãæãå¤è¦³ãæä½æ§ã«åããã¦è¿½å ã®ã«ã¹ã¿ãã¤ãºãå¿ è¦ã¨æãããã¨ãããã¾ãã
UIã©ã¤ãã©ãªã¯å¹ççãªéçºãæ¯æ´ãããã®ã§ãããå®å ¨ãªæè»æ§ãæä¾ã§ããªãå ´åããããã¨ãè¦ãã¦ããã¨è¯ãã§ãããã
ããã¦ãæãæé©ãªã©ã¤ãã©ãªãé¸ã¶éã«ã¯ãããã¸ã§ã¯ãã®è¦ä»¶ããã¶ã¤ã³ã®ç®æ¨ã«åããã¦æ¤è¨ãããã¨ãæ¨å¥¨ãã¾ããåã©ã¤ãã©ãªã®ããã¥ã¡ã³ãããã¢ãåç §ãã¦ãèªåã«åã£ããã®ãé¸ã¶ãã¨ãéè¦ã§ãã
æ¬æ¥ã¯ä»¥ä¸ã¨ãªãã¾ãã
æå¾ã¾ã§èªãã§é ããããã¨ããããã¾ãã
ãã®è¨äºãå½¹ã«ç«ã£ãããããã¯ãã¼ã¯ã¨å ±æããã¦ããã ããã¨å¹¸ãã§ãã