1¡¢Ç°ÑÔ
±¾ÎÄ»á½ÌÄãÈçºÎÔÚ 40 ÐдúÂëÄÚ£¬²»ÒÀÀµÈκεÚÈý·½µÄ¿â£¬Óô¿ JavaScript ʵÏÖÒ»¸ö React.js
¡£
±¾ÎĵÄÄ¿µÄÊÇ£º½Ò¿ª¶Ô³õѧÕß¿´ÆðÀ´ºÜºÜÄÑÀí½âµÄ React.js µÄ×é¼þ»¯ÐÎʽµÄÍâÒ¡£Èç¹ûÄã¸Õ¿ªÊ¼Ñ§Ï°
React.js ²¢ÇҸоõºÜÃÔ㣬ÄÇô¿´ÍêÕâÆªÎÄÕÂÒÔºó¾ÍÄܹ»½â³ýһЩÒÉ»ó¡£
ÁíÍâ×¢Ò⣬±¾ÎÄËùʵÏֵĴúÂëÖ»ÓÃÓÚ˵Ã÷½Ìѧչʾ£¬²¢²»ÊÊÓÃÓÚÉú²ú»·¾³¡£´úÂëÍйÜÕâ¸ö ²Ö¿â¡£Ðļ±Èç·ÙµÄͬѧ¿ÉÒÔÏÈÈ¥¿´´úÂ룬µ«±¾ÎÄ»á´Ó×î»ù´¡µÄÄÚÈÝ¿ªÊ¼½âÊÍ¡£
2¡¢Ò»ÇдӵãÔÞ˵Æð
½ÓÏÂÀ´ËùÓеĴúÂë¶¼»á´ÓÒ»¸ö»ù±¾µÄµãÔÞ¹¦ÄÜ¿ªÊ¼ÑÝ»¯£¬Äã»áÖ𽥿´µ½£¬ÎÄÕ´úÂëÂýÂýµØÔ½À´Ô½Ïñ React.js
µÄ×é¼þ´úÂë¡£¶øÔÚÕâ¸ö¹ý³ÌÀïÃæ£¬´ó¼ÒÐèÒªÖ»ÐèÒª¸ú×ÅÎÄÕµÄ˼·£¬¾Í¿ÉÒÔÔÚ´úÂëµÄÑÝ»¯µ±ÖÐÌå»áµ½×é¼þ»¯ÐÎʽ¡£
¼ÙÉèÏÖÔÚÎÒÃÇÐèҪʵÏÖÒ»¸öµãÔÞ¡¢È¡ÏûµãÔ޵ŦÄÜ¡£

Èç¹ûÄã¶Ôǰ¶ËÉÔ΢ÓÐÒ»µãÁ˽⣬Äã¾Í˳ÊÖÄéÀ´£º
HTML:
<body> <div class='wrapper'> <button class='like-btn'> <span class='like-text'>µãÔÞ</span> <span>??</span> </button> </div> </body> |
ΪÁËÏÖʵµ±ÖеÄʵ¼ÊÇé¿ö£¬ËùÒÔÕâÀïÌØÒâ°ÑÕâ¸ö button µÄ HTML ½á¹¹¸ãµÃÉÔ΢¸´ÔÓһЩ¡£ÓÐÁËÕâ¸ö
HTML ½á¹¹£¬ÏÖÔھ͸øËü¼ÓÈëһЩ JavaScript µÄÐÐΪ£º
JavaScript£º
const button = document.querySelector('.like-btn') const buttonText = button.querySelector('.like-text') let isLiked = false button.addEventListener('click', function () { isLiked = !isLiked if (isLiked) { buttonText.innerHTML = 'È¡Ïû' } else { buttonText.innerHTML = 'µãÔÞ' } }, false) |
¹¦ÄܺÍʵÏÖ¶¼ºÜ¼òµ¥£¬°´Å¥ÒѾ¿ÉÒÔÌṩµãÔÞºÍÈ¡ÏûµãÔ޵ŦÄÜ¡£ÕâʱºòÄãµÄͬÊÂÅܹýÀ´ÁË£¬ËµËûºÜϲ»¶ÄãµÄ°´Å¥£¬ËûÒ²ÏëÓÃÄãдµÄÕâ¸öµãÔÞ¹¦ÄÜ¡£Äã¾Í»á·¢ÏÖÕâÖÖʵÏÖ·½Ê½ºÜÖÂÃü£ºÄãµÄͬÊÂÒª°ÑÕû¸ö
button ºÍÀïÃæµÄ½á¹¹¸´ÖƹýÈ¥£¬»¹ÓÐÕû¶Î JavaScript ´úÂëÒ²Òª¸´ÖƹýÈ¥¡£ÕâÑùµÄʵÏÖ·½Ê½Ã»ÓÐÈκοɸ´ÓÃÐÔ¡£
3¡¢ÊµÏֿɸ´ÓÃÐÔ
ËùÒÔÏÖÔÚÎÒÃÇÀ´Ïë°ì·¨½â¾öÕâ¸öÎÊÌ⣬ÈÃÕâ¸öµãÔÞ¹¦ÄܾßÓнϺõĿɸ´ÓõÄЧ¹û£¬ÄÇôÄãµÄͬÊÂÃǾͿÉÒÔÇáËÉ×ÔÔÚµØÊ¹ÓÃÕâ¸öµãÔÞ¹¦ÄÜ¡£
3.1 ½á¹¹¸´ÓÃ
ÏÖÔÚÎÒÃÇÀ´ÖØÐ±àдÕâ¸öµãÔÞ¹¦ÄÜ¡£Õâ´ÎÎÒÃÇÏÈдһ¸öÀ࣬Õâ¸öÀàÓÐ render ·½·¨£¬Õâ¸ö·½·¨ÀïÃæÖ±½Ó·µ»ØÒ»¸ö±íʾ
HTML ½á¹¹µÄ×Ö·û´®£º
class LikeButton { render () { return ` <button class='like-btn'> <span class='like-text'>ÔÞ</span> <span>??</span> </button> ` } } |
È»ºó¿ÉÒÔÓÃÕâ¸öÀàÀ´¹¹½¨²»Í¬µÄµãÔÞ¹¦ÄܵÄʵÀý£¬È»ºó°ÑËüÃÇ²åµ½Ò³ÃæÖС£
const wrapper = document.querySelector('.wrapper') const likeButton1 = new LikeButton() wrapper.innerHTML = likeButton1.render()
const likeButton2 = new LikeButton()
wrapper.innerHTML += likeButton2.render() |

ÕâÀï·Ç³£±©Á¦µØÊ¹ÓÃÁË innerHTML £¬°ÑÁ½¸ö°´Å¥´Ö³µØ²åÈëÁË wrapper µ±ÖС£ËäÈ»Äã¿ÉÄÜ»á¶ÔÕâÖÖʵÏÖ·½Ê½·Ç³£²»ÂúÒ⣬µ«ÎÒÃÇ»¹ÊÇÃãÇ¿ÁËʵÏÖÁ˽ṹµÄ¸´Óá£ÎÒÃǺóÃæÔÙÀ´ÓÅ»¯Ëü¡£
3.2 Éú³É DOM ÔªËØ²¢ÇÒÌí¼Óʼþ
ÄãÒ»¶¨»á·¢ÏÖ£¬ÏÖÔڵİ´Å¥ÊÇËÀµÄ£¬Äãµã»÷ËüËü¸ù±¾²»»áÓÐʲô·´Ó¦¡£ÒòΪ¸ù±¾Ã»ÓÐÍùÉÏÃæÌí¼Óʼþ¡£µ«ÊÇÎÊÌâÀ´ÁË£¬LikeButton
ÀàÀïÃæÊÇËäȻ˵ÓÐÒ»¸ö button£¬µ«ÊÇÕâÍæÒâ¸ù±¾¾ÍÊÇÔÚ×Ö·û´®ÀïÃæµÄ¡£ÄãÔõôÄÜÍùÒ»¸ö×Ö·û´®ÀïÃæÌí¼ÓʼþÄØ£¿DOM
ʼþµÄ API Ö»ÓÐ DOM ½á¹¹²ÅÄÜÓá£
ÎÒÃÇÐèÒª DOM ½á¹¹£¬×¼È·µØÀ´Ëµ£ºÎÒÃÇÐèÒªÕâ¸öµãÔÞ¹¦ÄÜµÄ HTML ×Ö·û´®´ú±íµÄ
DOM ½á¹¹¡£¼ÙÉèÎÒÃÇÏÖÔÚÓÐÒ»¸öº¯Êý createDOMFromString £¬ÄãÍùÕâ¸öº¯Êý´«Èë HTML
×Ö·û´®£¬µ«ÊÇËü»á°ÑÏàÓ¦µÄ DOM ÔªËØ·µ»Ø¸øÄã¡£Õâ¸öÎÊÌâ¾Í¿ÉÒÔ½â¾öÁË¡£
// ::String => ::Documentconst createDOMFromString = (domString) => { // TODO } |
ÏȲ»ÓùÜÕâ¸öº¯ÊýÓ¦¸ÃÔõôʵÏÖ£¬ÏÈÖªµÀËüÊǸÉÂïµÄ¡£ÄÃÀ´Óþͺã¬ÕâʱºòÓÃËüÀ´¸ÄдһÏ LikeButton
Àࣺ
class LikeButton { render () { this.el = createDOMFromString(` <button class='like-btn'> <span class='like-text'>µãÔÞ</span> <span>??</span> </button> `) this.el.addEventListener('click', () => console.log('click'), false) return this.el } } |
ÏÖÔÚ render() ·µ»ØµÄ²»ÊÇÒ»¸ö html ×Ö·û´®ÁË£¬¶øÊÇÒ»¸öÓÉÕâ¸ö html ×Ö·û´®ËùÉú³ÉµÄ DOM¡£ÔÚ·µ»Ø
DOM ÔªËØÖ®Ç°»áÏȸøÕâ¸ö DOM ÔªËØÉÏÌí¼ÓʼþÔÙ·µ»Ø¡£
ÒòΪÏÖÔÚ render ·µ»ØµÄÊÇ DOM ÔªËØ£¬ËùÒÔ²»ÄÜÓà innerHTML ±©Á¦µØ²åÈë wrapper¡£¶øÊÇÒªÓÃ
DOM API ²å½øÈ¥¡£
const wrapper = document.querySelector('.wrapper')
const likeButton1 = new LikeButton()
wrapper.appendChild(likeButton1.render())
const likeButton2 = new LikeButton()
wrapper.appendChild(likeButton2.render()) |
ÏÖÔÚÄãµã»÷ÕâÁ½¸ö°´Å¥£¬Ã¿¸ö°´Å¥¶¼»áÔÚ¿ØÖÆÌ¨´òÓ¡ click£¬ËµÃ÷ʼþ°ó¶¨³É¹¦ÁË¡£µ«Êǰ´Å¥ÉϵÄÎı¾»¹ÊÇûÓз¢Éú¸Ä±ä£¬Ö»ÒªÉÔ΢¸Ä¶¯Ò»ÏÂ
LikeButton µÄ´úÂë¾Í¿ÉÒÔÍê³ÉÍêÕûµÄ¹¦ÄÜ£º
class LikeButton { constructor () { this.state = { isLiked: false } }
changeLikeText () {
const likeText = this.el.querySelector('.like-text')
this.state.isLiked = !this.state.isLiked
if (this.state.isLiked) {
likeText.innerHTML = 'È¡Ïû'
} else {
likeText.innerHTML = 'µãÔÞ'
}
}
render () {
this.el = createDOMFromString(`
<button class='like-btn'>
<span class='like-text'>µãÔÞ</span>
<span>??</span>
</button> `)
this.el.addEventListener('click', this.changeLikeText.bind(this),
false)
return this.el
}
} |
ÕâÀïµÄ´úÂëÉÔ΢³¤ÁËһЩ£¬µ«ÊÇ»¹ÊǺܺÃÀí½â¡£Ö»²»¹ýÊÇÔÚ¸ø LikeButton ÀàÌí¼ÓÁ˹¹Ô캯Êý£¬Õâ¸ö¹¹Ô캯Êý»á¸øÃ¿Ò»¸ö
LikeButton µÄʵÀýÌí¼ÓÒ»¸ö¶ÔÏó state£¬state ÀïÃæ±£´æÁËÿ¸ö°´Å¥×Ô¼ºÊÇ·ñµãÔÞµÄ״̬¡£»¹¸ÄдÁËÔÀ´µÄʼþ°ó¶¨º¯Êý£ºÔÀ´Ö»´òÓ¡
click£¬ÏÖÔÚµã»÷µÄ°´Å¥µÄʱºò»áµ÷Óà changeLikeText ·½·¨£¬Õâ¸ö·½·¨»á¸ù¾Ý this.state
µÄ״̬¸Ä±äµãÔÞ°´Å¥µÄÎı¾¡£
Èç¹ûÄãÏÖÔÚ»¹ÄܸúµÃÉÏÎÄÕµÄ˼·£¬ÄÇôÄãÁôÒâÏ£¬ÏÖÔڵĴúÂëÒѾºÍ React.js µÄ×é¼þ´úÂëÓеãÀàËÆÁË¡£µ«ÆäʵÎÒÃǸù±¾Ã»Óн²
React.js µÄÈκÎÄÚÈÝ£¬ÎÒÃÇÒ»ÐÄÒ»ÒâÖ»ÏëÔõô×öºÃ¡°×é¼þ»¯¡±¡£
ÏÖÔÚÕâ¸ö×é¼þµÄ¿É¸´ÓÃÐÔÒѾºÜ²»´íÁË£¬ÄãµÄͬÊÂÃÇֻҪʵÀý»¯Ò»ÏÂÈ»ºó²åÈëµ½ DOM ÀïÃæÈ¥¾ÍºÃÁË¡£
4¡¢ÎªÊ²Ã´²»±©Á¦Ò»µã£¿
×ÐϸÁôÒâһϠchangeLikeText º¯Êý£¬Õâ¸öº¯Êý°üº¬ÁË DOM ²Ù×÷£¬ÏÖÔÚ¿´ÆðÀ´±È½Ï¼òµ¥£¬ÄÇÊÇÒòΪÏÖÔÚÖ»ÓÐ
isLiked Ò»¸ö״̬¡£µ«Ïëһϣ¬ÒòΪÄãµÄÊý¾Ý״̬¸Ä±äÁËÄã¾ÍÐèҪȥ¸üÐÂÒ³ÃæµÄÄÚÈÝ£¬ËùÒÔÈç¹ûÄãµÄ×é¼þ°üº¬Á˺ܶà״̬£¬ÄÇôÄãµÄ×é¼þ»ù±¾È«²¿¶¼ÊÇ
DOM ²Ù×÷¡£Ò»¸ö×é¼þ°üº¬ºÜ¶à״̬µÄÇé¿ö·Ç³£³£¼û£¬ËùÒÔÕâÀﻹÓÐÓÅ»¯µÄ¿Õ¼ä£ºÈçºÎ¾¡Á¿¼õÉÙÕâÖÖÊÖ¶¯ DOM
²Ù×÷£¿
4.1 ״̬¸Ä±ä -> ¹¹½¨Ð嵀 DOM ÔªËØ
ÕâÀïÒªÌá³öµÄÒ»ÖÖ½â¾ö·½°¸£ºÒ»µ©×´Ì¬·¢Éú¸Ä±ä£¬¾ÍÖØÐµ÷Óà render ·½·¨£¬¹¹½¨Ò»¸öÐ嵀 DOM ÔªËØ¡£ÕâÑù×öµÄºÃ´¦ÊÇÊ²Ã´ÄØ£¿ºÃ´¦¾ÍÊÇÄã¿ÉÒÔÔÚ
render ·½·¨ÀïÃæÊ¹ÓÃ×îÐ嵀 this.state À´¹¹Ô첻ͬ HTML ½á¹¹µÄ×Ö·û´®£¬²¢ÇÒͨ¹ýÕâ¸ö×Ö·û´®¹¹Ô첻ͬµÄ
DOM ÔªËØ¡£Ò³Ãæ¾Í¸üÐÂÁË£¡ÌýÆðÀ´ÓеãÈÆ£¬¿´¿´´úÂëÔõôд£º
class LikeButton { constructor () { this.state = { isLiked: false } }
setState (state) {
this.state = state
this.el = this.render()
}
changeLikeText () {
this.setState({
isLiked: !this.state.isLiked
})
}
render () {
this.el = createDOMFromString(`
<button class='like-btn'>
<span class='like-text'>${this.state.isLiked
? 'È¡Ïû' : 'µãÔÞ'}</span>
<span>??</span>
</button> `)
this.el.addEventListener('click', this.changeLikeText.bind(this),
false)
return this.el
}
} |
ÆäʵֻÊǸÄÁ˼¸¸öСµØ·½£º
render º¯ÊýÀïÃæµÄ HTML ×Ö·û´®»á¸ù¾Ý this.state ²»Í¬¶ø²»Í¬£¨ÕâÀïÊÇÓÃÁË ES6
µÄ×Ö·û´®ÌØÐÔ£¬×öÕâÖÖÊÂÇéºÜ·½±ã£©¡£
ÐÂÔöÒ»¸ö setState º¯Êý£¬Õâ¸öº¯Êý½ÓÊÜÒ»¸ö¶ÔÏó×÷Ϊ²ÎÊý£»Ëü»áÉèÖÃʵÀýµÄ state£¬È»ºóÖØÐµ÷ÓÃÒ»ÏÂ
render ·½·¨¡£
µ±Óû§µã»÷°´Å¥µÄʱºò£¬ changeLikeText »á¹¹½¨Ð嵀 state ¶ÔÏó£¬Õâ¸öÐ嵀 state
£¬´«Èë setState º¯Êýµ±ÖС£
ÕâÑùµÄ½á¹û¾ÍÊÇ£¬Óû§Ã¿´Îµã»÷£¬changeLikeText ¶¼»áµ÷Óøıä×é¼þ״̬Ȼºóµ÷Óà setState£»setState
»áµ÷Óà render ·½·¨ÖØÐ¹¹½¨Ð嵀 DOM ÔªËØ£»render ·½·¨»á¸ù¾Ý state µÄ²»Í¬¹¹½¨²»Í¬µÄ
DOM ÔªËØ¡£
Ò²¾ÍÊÇ˵£¬ÄãÖ»Òªµ÷Óà setState£¬×é¼þ¾Í»áÖØÐÂäÖȾ¡£ÎÒÃÇ˳ÀûµØÏû³ýÁËû±ØÒªµÄ DOM ²Ù×÷¡£
4.2 ÖØÐ²åÈëÐ嵀 DOM ÔªËØ
ÉÏÃæµÄ¸Ä½ø²»»áÓÐʲôЧ¹û£¬ÒòΪÄã×Ðϸ¿´Ò»Ï¾ͻᷢÏÖ£¬ÆäÊµÖØÐÂäÖȾµÄ DOM ÔªËØ²¢Ã»ÓвåÈëµ½Ò³Ãæµ±ÖС£ËùÒÔÕâ¸ö×é¼þÖ®Í⣬ÄãÐèÒªÖªµÀÕâ¸ö×é¼þ·¢ÉúÁ˸ı䣬²¢ÇÒ°ÑеÄ
DOM ÔªËØ¸üе½Ò³Ãæµ±ÖС£
ÖØÐÂÐÞ¸ÄһϠsetState ·½·¨£º
... setState (state) { const oldEl = this.el this.state = state this.el = this.render() if (this.onStateChange) this.onStateChange(oldEl, this.el) }... |
ʹÓÃÕâ¸ö×é¼þµÄʱºò£º
const likeButton = new LikeButton()wrapper.appendChild(likeButton.render()) // µÚÒ»´Î²åÈë DOM ÔªËØcomponent.onStateChange = (oldEl, newEl) => { wrapper.insertBefore(newEl, oldEl) // ²åÈëеÄÔªËØ wrapper.removeChild(oldEl) // ɾ³ý¾ÉµÄÔªËØ} |
ÕâÀïÿ´Î setState ¶¼»áµ÷Óà onStateChange ·½·¨£¬¶øÕâ¸ö·½·¨ÊÇʵÀý»¯ÒÔºóʱºò±»ÉèÖõģ¬ËùÒÔÄã¿ÉÒÔ×Ô¶¨Òå
onStateChange µÄÐÐΪ¡£ÕâÀï×öµÄÊÂÊÇ£¬Ã¿µ± setState µÄʱºò£¬¾Í»á°Ñ²åÈëÐ嵀 DOM
ÔªËØ£¬È»ºóɾ³ý¾ÉµÄÔªËØ£¬Ò³Ãæ¾Í¸üÐÂÁË¡£ÕâÀïÒѾ×öµ½Á˽øÒ»²½µÄÓÅ»¯ÁË£ºÏÖÔÚ²»ÐèÒªÔÙÊÖ¶¯¸üÐÂÒ³ÃæÁË¡£
·ÇÒ»°ãµÄ±©Á¦¡£²»¹ýûÓйØÏµ£¬ÕâÖÖ±©Á¦ÐÐΪ¿ÉÒÔ±» Virtual-DOM µÄ diff ²ßÂÔ¹æ±Üµô£¬µ«Õâ²»ÊDZ¾ÎÄÕÂËùÌÖÂ۵ķ¶Î§¡£
Õâ¸ö°æ±¾µÄµãÔÞ¹¦Äܺܲ»´í£¬ÎÒ¿ÉÒÔ¼ÌÐøÍùÉÏÃæ¼Ó¹¦ÄÜ£¬¶øÇÒ»¹²»ÐèÒªÊÖ¶¯²Ù×÷DOM¡£µ«ÊÇÓÐÒ»¸ö²»ºÃµÄµØ·½£¬Èç¹ûÎÒÒªÖØÐÂÁíÍâ×öÒ»¸öÐÂ×é¼þ£¬Æ©Èç˵ÆÀÂÛ×é¼þ£¬ÄÇôÀïÃæµÄÕâЩ
setState ·½·¨ÒªÖØÐÂдһ±é£¬ÆäʵÕâЩ¶«Î÷¶¼¿ÉÒÔ³é³öÀ´¡£
5¡¢³éÏó³ö Component Àà
ΪÁËÈôúÂë¸üÁé»î£¬¿ÉÒÔд¸ü¶àµÄ×é¼þ£¬ÎÒ°ÑÕâÖÖģʽ³éÏó³öÀ´£¬·Åµ½Ò»¸ö Component À൱ÖУº
class Component { constructor (props = {}) { this.props = props }
setState (state) {
const oldEl = this.el
this.state = state
this.el = this.renderDOM()
if (this.onStateChange) this.onStateChange(oldEl,
this.el)
}
renderDOM () {
this.el = createDOMFromString(this.render())
if (this.onClick) {
this.el.addEventListener('click', this.onClick.bind(this),
false)
}
return this.el
}
} |
»¹ÓÐÒ»¸ö¶îÍâµÄ mount µÄ·½·¨£¬Æäʵ¾ÍÊǰÑ×é¼þµÄ DOM ÔªËØ²åÈëÒ³Ãæ£¬²¢ÇÒÔÚ setState µÄʱºò¸üÐÂÒ³Ãæ£º
const mount = (wrapper, component) => { wrapper.appendChild(component.renderDOM()) component.onStateChange = (oldEl, newEl) => { wrapper.insertBefore(newEl, oldEl) wrapper.removeChild(oldEl) } } |
ÕâÑùµÄ»°ÎÒÃÇÖØÐÂдµãÔÞ×é¼þ¾Í»á±ä³É£º
class LikeButton extends Component { constructor (props) { super(props) this.state = { isLiked: false } }
onClick () {
this.setState({
isLiked: !this.state.isLiked
})
}
render () {
return `
<button class='like-btn'>
<span class='like-text'>${this.props.word
|| ''} ${this.state.isLiked ? 'È¡Ïû' : 'µãÔÞ'}</span>
<span>??</span>
</button> `
}
}
mount(wrapper, new LikeButton({ word: 'hello'
})) |
ÓÐûÓз¢ÏÖÄãдµÄ´úÂëÒѾºÍ React.js µÄ×é¼þд·¨ºÜÏàËÆÁË£¿¶øÇÒ»¹ÊÇ¿ÉÒÔÕý³£ÔË×÷µÄ´úÂ룬¶øÇÒÎÒÃÇ´ÓÍ·µ½Î²¶¼ÊÇÓô¿µÄ
JavaScript£¬Ã»ÓÐÒÀÀµÈκεÚÈý·½¿â¡££¨×¢ÒâÕâÀï¼ÓÈëÁËÉÏÃæÃ»ÓÐÌáµ½¹ýµã props£¬¿ÉÒÔ¸ø×é¼þ´«ÈëÅäÖÃÊôÐÔ£¬¸ú
React.js Ò»Ñù£©¡£
Ö»ÒªÓÐÁËÉÏÃæÄǸö Component ÀàºÍ mount ·½·¨¼ÓÆðÀ´²»×ã40ÐдúÂë¾Í¿ÉÒÔ×öµ½×é¼þ»¯¡£Èç¹ûÎÒÃÇÐèҪдÁíÍâÒ»¸ö×é¼þ£¬Ö»ÐèÒªÏñÉÏÃæÄÇÑù£¬¼òµ¥µØ¼Ì³ÐÒ»ÏÂ
Component Àà¾ÍºÃÁË£º
class RedBlueButton extends Component { constructor (props) { super(props) this.state = { color: 'red' } }
onClick () {
this.setState({
color: 'blue'
})
}
render () {
return `
<div style='color: ${this.state.color};'>${this.state.color}</div>
`
}
} |
¼òµ¥ºÃÓã¬ÍêÕûµÄ´úÂë¿ÉÒÔÔÚÕâÀïÕÒµ½£º React.js in 40
àÞ£¬ÍüÁË£¬»¹ÓÐÒ»¸öÉñÃØµÄ createDOMFromString£¬ÆäʵËü¸ü¼òµ¥£º
const createDOMFromString = (domString) => { const div = document.createElement('div') div.innerHTML = domString return div } |
6¡¢×ܽá
Äãµ½µ×ÄÜ´ÓÎÄÕÂÖлñÈ¡µ½Ê²Ã´£¿
ºÃ°É£¬ÎÒ³ÐÈÏÎÒ±êÌâµ³ÁË£¬Õâ¸ö 40 Ðв»µ½µÄ´úÂëÆäʵÊÇÒ»¸ö²Ð·Ï¶øÇÒÖÇÕϰæµÄ React.js£¬Ã»ÓÐ JSX
£¬Ã»ÓÐ×é¼þǶÌ׵ȵȡ£ËüÖ»ÊÇ React.js ×é¼þ»¯±íÏÖÐÎʽµÄÒ»ÖÖʵÏÖ¶øÒÑ¡£
React µÄ setState ¡¢props µÈµÈ¶¼Ö»²»¹ýÊÇÒ»ÖÖÐÎʽ£¬¶øºÜ¶à³õѧÕ߻ᱻËüÕâÖÖÐÎʽ×÷ÃÔ»ó¡£±¾ÆªÎÄÕÂÆäʵ¾ÍÊǽÒ¶ÁËÕâÖÖ×é¼þ»¯ÐÎʽµÄʵÏÖÔÀí¡£Èç¹ûÄãÕýÔÚѧϰ»òÕßѧϰ
React.js ¹ý³ÌºÜÃÔ㣬ÄÇô¿´ÍêÕâÆªÎÄÕÂÒÔºó¾ÍÄܹ»½â³ýһЩÒÉ»ó¡£
±¾ÎIJ¢Ã»ÓÐÉæ¼°µ½ Virtual DOM µÄÈκÎÄÚÈÝ£¬ÓÐÐèÒªµÄͬѧ¿ÉÒԲο¼Ò»ÏÂÕâÆª²©¿Í £¬½éÉܵĺÜÏ꾡¡£ÓÐÐËȤµÄͬѧ¿ÉÒÔ°ÑÁ½Õß½áºÏÆðÀ´£¬°Ñ
Virtual DOM Ìæ´ú±¾Îı©Á¦´¦ÀíµÄ mount ÖеÄʵÏÖ£¬ÕæÕýʵÏÖÒ»¸ö React.js¡£ |