ãã¬ã¼ã³ã¢ã¼ã
åç
â / âã§ç§»å
fã§ãã«ã¹ã¯ãªã¼ã³
escã§ããã
Reactã¨Canvasã§ãçµµããæ©è½ãä½ã£ã話
ããã«ã¡ã¯
ç»åç·¨éæ©è½ãªãã¥ã¼ã¢ã«
- React諸ã ã®ä½æ¥ãè½ã¡çãã¦ããã®ã§éå§
- å³å½¢ã®åç·¨éã»åé ç½®ãåºæ¥ãããã«
- undoã¨ãããã¨ä¾¿å©
v1.0ã®å®è£ ç¶æ
- canvasã2ã¤
- ã¦ã¼ã¶ã¼ã®ã¢ã¯ã·ã§ã³ï¼ç·ãå¼ããªã©ï¼ã«åããã¦ãã³ãã³ã¢ãããã¼ãããç¨canvas
- ã¦ã¼ã¶ã¼ã®ã¢ã¯ã·ã§ã³ã1ã¤å®äºãããã¨ã«âã®canvasããæ¸ãè¾¼ã¿ãç§»æ¤ãã¦èç©ããã¦ããç¨canvas
- ãã£ã¡ã®canvasãæåã«ãã£ã¦ã mousedown -> mousemove -> mouseup ãæ´ãã§ãã³ãã³æ´æ°ãã¦ãã
- ã¦ã¼ã¶ã¼ã®ã¢ã¯ã·ã§ã³å±¥æ´ã®ç®¡çãªã©ããã¦ããªãã®ã§ãããã管çãã¦ããã®ã¢ã¯ã·ã§ã³å±¥æ´ã«å¼å¿ãã¦canvasããã³ãã³æ¸ãæããã¨ããæãã«ãããã
- ç¢å°ã¯çµ¶å¦ãªç·ã®æ²ããå ·åãªã©ããã¼ãã³ã¼ãã£ã³ã°ããã¦ããã®ã§ããã®ã©ã¤ãã©ãªã¯ãªãã¨ããã®ã¾ã¾æ¬¡ã§ã使ãããã
ä»åã®ç»å ´äººç©
- canvas
- ReactComponent
- DOMEvent
canvasãReactã§ä½¿ãã¨ãã®åºæ¥äº
ããå°ãå ·ä½çã«
<Surface width={surfaceWidth} height={surfaceHeight} left={0} top={0}> <Layer /> <Image style={imageStyle} src='...' /> <Text style={textStyle}> 京é½ãªãã </Text> <Text>...</Text> <Text>...</Text> <Image /> <Text>...</Text>
ãã©ãã°ã§ãªãµã¤ãºã¨ãåé ç½®ããã
- ãã¦ã¹ãã¤ã³ã¿ãcanvasä¸ã®ã©ã®çµµã鏿ãã¦ãããææ¡ããå¿ è¦ããã
- FPSè½ã¨ããã«ãã«ãã«canvasã ããæ´æ°ããã
DOM Eventã®ãã³ããªã³ã°ã¯èª°ã/ã©ããã£ã¦ããï¼
äºä¾ç´¹ä»
React Konva
- GitHub - lavrton/react-konva: React Konva is a JavaScript library for drawing complex canvas graphics using React.
- Using React with canvas element — Medium
Konvaã¨ããç°å¸¸ã«æ°ã®å©ããCanvasãæ±ãã©ã¤ãã©ãªãå©ç¨ããReactComponentéã
React-Canvas
- GitHub - Flipboard/react-canvas: High performance <canvas> rendering for React components
- 60fps on the mobile web — Flipboard Engineering
canvasã§ã¹ã¯ãã¼ã«ã«å¿ãã¦ããã³ãã³æãã¦ããã¨DOMãããrepaintãæ©ãã¦ãã«ãã«ãããããçµµããæ©è½ã¯ãªãã
https://flipboard.com/ ã®ã¹ããçã§å®éã«ä½¿ããã¦ããé°å²æ°ã£ã½ãï¼
ä»åã®ä½æ¦
- canvasã®ä¸ã«å³å½¢ã¨åãå½¢ã®div OR svgãéãã¦ã¤ãã³ãããã³ããªã³ã°ããã
- ä¸ã®æ¹ã®Componentã®stateã®shapesã£ã¦ã¨ãã«å³å½¢æ
å ±ã®é
åãå
¥ãã¦Canvasã®æç»ç¶æ
ã管çãã
- ã¤ãã§ã«ãã®æ å ±ã使ã£ã¦å³å½¢ã®é¸æãªã©ããã³ããªã³ã°ããdivãæç»ãã
- undo / redoçãªæä½ãstateãæ´æ°ãã¦ãã
é°å²æ°
- wrapper
- Layer
- ç¢å°
- æå
- ç¢å°
- åè§
- canvas
- Layer
canvas ã®ç¶æ 管ç
- canvas
- å³å½¢ãã¡ãã£ã¨ãºã©ãããã¨ãç·ã®è²ãå¤ãããã¨ãã§ãæ¯åå ¨é¨æãç´ãå¿ è¦ããã
React Componentã®ã©ã¤ããµã¤ã¯ã«
- componentWillReceiveProps
- shouldComponentUpdate
- componentWillUpdate
- render
- componentDidUpdate
- componentWillUnmount
Canvasã®ã¢ãããã¼ããã©ã®ã¿ã¤ãã³ã°ã§æ¿å ¥ãããåé¡
- componentãã¢ãããã¼ãããã¨ä¿æãã¦ããcanvasã®contextãæ»ã¬
- å³å½¢ã«éããã¤ãã³ããã³ããªã³ã°ã®divãå¤ãã¨repaintå°çã§æ»ã¬
- canvasã§ã¤ãã³ããã³ããªã³ã°ãå
¨é¨ãã£ã¦ããã°ããã®é¨åã§æ©ã¾ãªãã¦æ¸ã
- å³å½¢ã®é åãã©ããã䏿ãå¤å®ãã¾ããå¿
è¦ããã
- æåï¼ç¢å°ï¼
- å³å½¢ã®é åãã©ããã䏿ãå¤å®ãã¾ããå¿
è¦ããã
- canvasã§ã¤ãã³ããã³ããªã³ã°ãå
¨é¨ãã£ã¦ããã°ããã®é¨åã§æ©ã¾ãªãã¦æ¸ã
- å³å½¢ã«éããã¤ãã³ããã³ããªã³ã°ã®divãå¤ãã¨repaintå°çã§æ»ã¬
- mousedown -> mousemove -> mouseup ã®éã¯renderèµ°ãããªãããã«setStateãå©ããã«ä¸æ¦å®éã«ãã¦ããã¦ãcanvasã®ã¿ãæ´æ°ãã
- stateã«å ¥ããã«storeã¨ã使ãã°è¯ãã®ã§ã¯ã¨æããã©ãä»ã¯canvasã ããæ´æ°ãããã¨ãstoreã®Updateæã«ä¸æããç¥ããããªãã¨åããã¨ãèµ·ãã
- componentDidUpdateã®ã¿ã¤ãã³ã°ã§ä¸æã«canvasãå ¨é¨æãç´ã
çµæ
DEMO
ã¾ã¨ã
- 大ä½ã¹ã«ã¹ã«ãããã¯åãã¦ããç¶æ
- canvasã®ã¢ãããã¼ãã¿ã¤ãã³ã°ãReactã®ã©ã¤ããµã¤ã¯ã«ã®ä¸ã§ä¸æããã£ã¦ããå¿
è¦ããã
- ã©ã¤ããµã¤ã¯ã«ã®æ°æã¡ã«ãªãå¿ è¦ããã
- DOMã¯éã
å¿é äº
- ãªããããå°ãè¯ãæãã«ã¢ãã«åã§ããã®ã§ã¯ãªãã
- React使ãå¿ è¦ãããã®ã





