Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
40ÐдúÂëÄÚʵÏÖÒ»¸öReact.js
 
À´Ô´£ºÍøÂç ·¢²¼ÓÚ 2017-4-26
  2833  次浏览      30
 

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¡£

   
2833 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢