"Hooks µ½µ×ÊǸöÉ¶ÍæÒâ¶ù???"
ÄãÊDz»ÊÇÓÐÕâÑùµÄÒÉ»ó?ÔÚÄã×ÔÈÏΪÒѾÁ˽âÁ˲¶à React ËùÓеÄÄÚÈݵÄʱºò£¬Hooks ¾ÍÕâô³öÏÖÁË¡£
Õâ¾ÍÊÇǰ¶Ë¿ª·¢ÈËÔ±µÄÈÕ³££¬¼¼Êõ´Óδֹͣ¸üС£
ѧϰж«Î÷ÊÇÒ»¼þºÜ°ôµÄÊÂÇéÂð?µ±È»ÊÇ!µ«ÓеÄʱºòÎÒÃÇÓÖ²»µÃ²»Ë¼¿¼£º”ΪʲôҪѧËü?Õâ¸öж«Î÷ÓÐɶÒâÒå?ÎÒÊDZØÐëµÃѧËûÂð?“¡£
Õë¶ÔHooks¶øÑÔ£¬ÉÏÃæµÄÕâ¸öÎÊÌâ´ð°¸ÊÇ·ñ¶¨µÄ£¬Äã²»ÐèÒªÁ¢Âí¾ÍѧËü¡£Èç¹ûÄúÒ»Ö±ÔÚʹÓà React£¬²¢ÇÒÆù½ñΪֹһֱÔÚʹÓûùÓÚÀàµÄ×é¼þ£¬ÄÇô¾Í²»±Ø¼±ÓÚתÏò Hooks¡£Hooks ÊÇ¿ÉÑ¡µÄ£¬¿ÉÒÔÓëÏÖÓÐ×é¼þÅäºÏʹÓá£ÎÒÏàÐŵ±ÄãÒòΪҪʹÓÃж«Î÷¶ø²»µÃ²»ÖØÐ´Õû¸ö´úÂë¿â£¬ÄãÕû¸öÈ˶¼ÊDZÀÀ£µÄ¡£
ÔÚº¯Êý×é¼þÖÐʹÓÃ״̬
ÔÚʹÓà Hooks ֮ǰ£¬ÎÒÃDz»ÄÜÔÚº¯Êý×é¼þÖÐʹÓÃ״̬¡£Õâ¾ÍÒâζ×Å£¬Èç¹ûÄúÓÐÒ»¸ö¾¹ý¾«ÐÄÉè¼ÆºÍ²âÊԵĺ¯Êý×é¼þ£¬Í»È»ÐèÒª´æ´¢×´Ì¬£¬ÄÇôÄã¾Í²»µÃ²»°ÑËûÖØ¹¹ÎªÒ»¸öÀà×é¼þ¡£
Å£±ÆµÄÀ´ÁË£¬Hooks Èú¯Êý×é¼þÒ²ÄÜʹÓÃ״̬£¬¾ÍÒâζ×ÅÎÒÃDz»ÐèÒªÖØ¹¹Ö®Ç°×Ô¼ºµÄдµÄ´úÂ룬[¿ÉÒÔµã»÷ÕâÆªÎÄÕ²鿴¸ü¶à]( https://scotch.io/courses/5-essential-react-concepts-to-know-before-learning-redux/presentational-and-container-component-pattern-in-react)¡£
Àà×é¼þºÜ±¿ÖØ
ÎÒÃDz»µÄ²»³ÐÈϵÄÊÇ£¬Àà×é¼þ¸½´øÁËÌ«¶àµÄ¶«Î÷¡£constructor£¬binding£¬“this”ÎÞ´¦²»ÔÚ¡£Ê¹Óú¯Êý×é¼þ¿ÉÒÔÏû³ýÐí¶àÕâÖÖÇé¿ö£¬ÄÜÈÃÎÒÃǵĴúÂë¸üÈÝÒ×ά»¤¡£
¿ÉÒÔÔÚ[ReactÎĵµÖÐÁ˽â¸ü¶àÏà¹ØÄÚÈÝ](https://reactjs.org/docs/hooks-intro.html#classes-confuse-both-people-and-machines)
¸ü¸ßµÄ¿É¶ÁÐÔ
ÓÉÓÚ Hooks ÔÊÐíÎÒÃÇÔÚº¯Êý×é¼þÖÐʹÓÃ״̬£¬Òò´ËºÍÀà×é¼þÏà±È£¬ÕâÒâζͬÑùµÄ¹¦ÄÜ£¬ÎÒÃÇд³öÀ´µÄ´úÂë»á¸üºÃ¡£ ÕâÒ²»áÈÃÎÒÃǵĴúÂë¸ü¾ß¿É¶ÁÐÔ¡£ ÎÒÃÇÔÙÒ²²»Óõ£ÐÄ·½·¨ÊDz»Êǰó¶¨ÁË `this`£¬Ò²²»±Ø¼Çס `this` Ö®¼äµÄ¹ØÏµµÈµÈ¡£ ÎÒÃÇ¿ÉÒÔרÐÄд´úÂëÁË¡£
React State Hook
״̬£¬ÊÇReactÉú̬ϵͳµÄ»ù´¡¡£½ÓÏÂÀ´ÎÒ½«Í¨¹ý½éÉÜ×î³£¼ûµÄ Hook —— `useState()` À´Èôó¼Ò³õ²½Á˽â Hooks¡£
ÎÒÃÇÏÈÀ´¿´Ò»Ï¾ßÓÐ״̬µÄÀà×é¼þ¡£
import React, { Component } from 'react';
import './styles.css';
class Counter extends Component {
state = {
count: this.props.initialValue,
};
setCount = () => {
this.setState({ count: this.state.count + 1 });
};
render() {
return (
<div>
<h2>This is a counter using a class</h2>
<h1>{this.state.count}</h1>
<button onClick={this.setCount}>Click to Increment</button>
</div>
);
}
}
export default Counter;
ÓÐÁËReact Hooks Ö®ºó£¬ÎÒÃÇ¿ÉÒÔÖØÐ´Õâ¸öÀà×é¼þ²¢É¾³ýºÜ¶àÄÚÈÝ£¬Ê¹Æä¸üÒ×Àí½â
import React, { useState } from 'react';
function CounterWithHooks(props) {
const [count, setCount] = useState(props.initialValue);
return (
<div>
<h2>This is a counter using hooks</h2>
<h1>{count}</h1>
<button onClick={() => setCount(count + 1)}>Click to Increment</button>
</div>
);
}
export default CounterWithHooks;
´úÂë±äÉÙÁË£¬µ«Õâµ½µ×ÊÇɶÇé¿öÄØ£¿
React State Syntax
ÔÚÉÏÃæµÄ´úÂëÀÎÒÃÇÒѾÓõ½ÁËÈËÉúÖеÚÒ»¸ö React Hook
const [count, setCount] = useState();
¼òµ¥À´½²£¬ÕâÀïʹÓÃÁËÊý×éµÄ½á¹¹¸³Öµ¡£
useState()º¯ÊýΪÎÒÃÇÌṩÁËÁ½¸ö¶«Î÷£º
* Ò»¸ö±£´æ×´Ì¬ÖµµÄ±äÁ¿£¬ÔÚ±¾ÀýÖгÆÎªcount;
* Ò»¸ö¸ü¸ÄÖµµÄº¯Êý£¬ÔÚ±¾ÀýÖгÆÎªsetCount¡£
µ±È»£¬Äã¿ÉÒÔΪÕâÁ½¸ö¶«Î÷ÆðÈκÎÄãÏëÒªµÄÃû×Ö¡£
const [myCount, setCount] = useState(0);
¶øÇÒ£¬ÄãÒ²¿ÉÒÔÔÚÄãµÄ´úÂëÖÐÏñʹÓÃÕý³£±äÁ¿/º¯ÊýÒ»ÑùÈ¥ÓÃËûÃÇ¡£
function CounterWithHooks() {
const [count, setCount] = useState();
return (
<div>
<h2>This is a counter using hooks</h2>
<h1>{count}</h1>
<button onClick={() => setCount(count + 1)}>Click to Increment</button>
</div>
);
}
×¢Òâ×îÉÏÃæµÄµÄ`useState` Hook¡£ ÎÒÃÇÉùÃ÷¡¢½á¹¹ÁË2¸ö¶«Î÷£º
* counter£ºÊÇÓÃÀ´±£´æ×´Ì¬µÄ
* setCounter£ºÊÇÓÃÀ´¸ü¸Ä¼ÆÊýÆ÷±äÁ¿µÄº¯Êý
ÍùÏ¿´´úÂ룬Äú»á¿´µ½ÕâÒ»ÐУº
<h1>{count}</h1>
ÕâÊÇÒ»¸öʹÓà Hooks ±äÁ¿µÄÀý×Ó¡£ÔÚJSXÖУ¬ÎÒÃǽ« `count` ±äÁ¿·ÅÔÚ `{}` ÖУ¬È»ºó×÷ΪJavaScriptÖ´ÐÐËü£¬×îºó½« `count` µÄÖµ½«Õ¹Ê¾ÔÚÒ³ÃæÉÏ¡£
ÎÒÃÇÀ´¶ÔÕÕÒ»ÏÂÎÒÃÇ֮ǰÔÚÀà×é¼þÖÐʹÓÃ״̬µÄ·½Ê½£º
<h1>{this.state.count}</h1>
Äã»á·¢ÏÖ£¬ÎÒôÔÙÒ²²»ÐèÒª¹Ø×¢ `this` µÄʹÓÃÁË£¬ÕâʹÎÒÃǵıàÂ빤×÷±äµÃ¸ü¼ÓÇáËÉÁË¡£
±ÈÈ磬µ±Äãû¶¨Òå {count}µÄʱºò£¬VS Code±à¼Æ÷Ö±½Ó¾Í¸øÄ㱨¾¯¸æÁË£¬Äã¾Í¸üÔçµÄ·¢ÏÖ´íÎó¡£ µ«ÊÇÔÚÔËÐдúÂë֮ǰ£¬VS Code ¿É²»»áÖªµÀ {this.state.count} ÊDz»ÊǶ¨ÒåÁË¡£
ÎÒÃǼÌÐøÍùÏ¿´
<button onClick={() => setCount(count + 1)}>Click to Increment</button>
ÔÚÕâÐдúÂëÖУ¬ÎÒÃÇʹÓà setCountº¯ÊýÀ´¸ü¸Ä count±äÁ¿¡£
µ¥»÷°´Å¥µÄʱºî£¬ÎÒÃÇ°Ñ count±äÁ¿¸üÐÂΪ1¡£ÓÉÓÚ״̬±ä»¯£¬Òò´Ë»á´¥·¢ÊÓÍ¼ÖØÐÂäÖȾ£¬React »áÓÃÐ嵀 countֵΪÎÒÃǸüÐÂÊÓͼ¡£ ÕæÏ㣡
ÄÇÎÒÔõô¸øÊý¾ÝÒ»¸ö³õÊ¼ÖµÄØ£¿
Äú¿ÉÒÔͨ¹ý¸ø`useState()`´«µÝ²ÎÊýÀ´ÉèÖóõʼ״̬¡£ ¿ÉÒÔÊÇÒ»¸öÓ²±àÂëµÄÖµ£º
const [count, setCount] = useState(0);
»òÕßÄãÒ²¿ÉÒÔÓà `props` ´«½øÀ´µÄÖµ×÷Ϊ³õʼֵ£º
const [count, setCount] = useState(props.initialValue);
²»ÂÛÄãµÄprops.initialValueÊÇɶ£¬¶¼»á¸³Öµ¸øcount×÷Ϊ³õʼֵ¡£
×ܽáһϣºuseState×îˬµÄµØ·½ÔÚÓÚ£¬Äã¿ÉÒÔÏñʹÓÃÕý³£±äÁ¿¡¢º¯ÊýÒ»Ñù´¦ÀíÄãµÄ״̬¡£
ÄÇÈç¹ûÎÒÓжà¸ö״̬Êý¾ÝÕ¦°ì?
ÕâÊǾÍÊÇHooksÁíÍâÒ»¸öÅ£±ÆµÄµØ·½ÁË£¬ÔÚ×é¼þÀ`useState`ÄãÏëÓöàÉٴΣ¬¾ÍÓöàÉٴΣº
const [count, setCount] = useState(props.initialValue);
const [title, setTitle] = useState("This is my title");
const [age, setAge] = useState(25);
ÈçÄãËù¼û£¬ÎÒÃÇÏÖÔÚÓÐ3¸ö¶ÀÁ¢µÄ״̬¶ÔÏó¡£ÀýÈ磬Èç¹ûÎÒÃÇÏë¸üÐÂÄêÁ䣬ֻÐèµ÷ÓÃ`setAge()`º¯Êý¡£`count`ºÍ`title`Ò²ÊÇÒ»Ñù¡£ÎÒÃDz»ÔÙÊÜÖÆÓھɵı¿ÖصÄÀà×é¼þ·½Ê½——ÓÃ`setState()`À´¹ÜÀíÒ»¸ö³¬´óµÄ״̬¶ÔÏó¡£
this.setState({ count: props.initialValue, title: "This is my title", age: 25 })
ÄÇÊý¾Ý¸üеÄʱºò£¬ÎÒÒª×öһЩÊÂÇéÔõô×ö£¿
ÔÚʹÓú¯Êý×é¼þ + React Hooks ÕâÖÖģʽÏ£¬ÎÒÃÇÔÙÒ²²»ÓÃÈ¥¹ÜʲôÉúÃüÖÜÆÚÁË£¬Ê²Ã´ `componentDidMount`¡¢`componentDidUpdate`¶¼¿ÉÒÔͳͳ¼û¹íÈ¥ÁË¡£
Äã¿ÉÄÜ»áÎÊ£¬ÄÇÎÒÓÃɶ£¿£¿£¿±ð»Å£¬Ðֵܣ¡ React ¸øÎÒÃÇÌṩÁËÁíÍâÒ»¸ö¹³×ÓÀ´¸ÉÕâʶù¡£
useEffect
Ч¹û¹³×ÓuseEffectÊÇÎÒÃÇ´¦À퓸±×÷ÓԵĵط½¡£
ßÀ£¬¸±×÷Óã¿ÄÇÊÇɶ£¿
¸±×÷ÓÃ
ÄÇÎÒÃǾÍÏÈÆ«ÀëÒ»ÏÂÕýÌ⣬ÌÖÂÛһϸ±×÷Óõ½µ×ÊÇʲô¡£ÕâÓÐÖúÓÚÎÒÃÇÀí½â `useEffect()` µÄ×÷ÓÃÒÔ¼°ÎªÊ²Ã´ËûºÜÓÐÓá£
Ò»¸öÄã¿´²»¶®µÄÎÞÁĵÄÕý¹æ½âÊÍÓ¦¸ÃÊÇ£º
“ÔÚ±à³ÌÖУ¬¸±×÷ÓÃÊÇÖ¸ÔÚ³ÌÐò´¦Àí¹ý³Ì¸Ä±äÁ˳ÌÐò·¶Î§Ö®ÍâµÄ±äÁ¿”¡£
Óà React ÊõÓïÀ´Ëµ£¬¸±×÷ÓÃÆäʵÒâζ×Å“µ±×é¼þµÄ±äÁ¿»ò״̬ÒòijЩÍⲿÊÂÎï¶ø¸Ä±ä”¡£ ÀýÈ磺
·×é¼þ½ÓÊÜÁËÒ»¸ö¸Ä±ä×é¼þ±¾Éí״̬µÄprops
·µ±×é¼þ½øÐнӿڵ÷Óò¢ÔÚ½Ó¿Ú·µ»Ø½á¹ûÊÇÖ´ÐÐÁËijЩ²Ù×÷£¨ÀýÈ磬¸ü¸ÄÁË×é¼þµÄ״̬£©
ÄÇôΪʲô³ÆÖ®Îª¸±×÷ÓÃÄØ£¿
ÎÒÃDz»ÄÜÈ·¶¨ÕâЩ´úÂëµÄÖ´Ðнá¹ûÊÇʲô¡£ ÎÒÃÇÓÀÔ¶ÎÞ·¨°Ù·Ö°ÙÈ·¶¨ÎÒÃǵÄ×é¼þ»á½ÓÊÕµ½Ê²Ã´ÑùµÄ `props `£¬Ò²ÎÞ·¨È·¶¨½Ó¿Úµ÷Ó÷µ»ØµÄ½á¹ûÊý¾ÝÊÇʲô¡£ ¶øÇÒ£¬ÎÒÃÇÎÞ·¨È·¶¨Õ⽫ÈçºÎÓ°ÏìÎÒÃǵÄ×é¼þ¡£
µ±È»£¬ÎÒÃÇÒ²¿ÉÒÔ±àд´úÂëУÑé¡¢´¦Àí´íÎóµÈ£¬µ«ÊÇÎÒÃÇ×îÖÕ»¹ÊDz»ÄÜÈ·¶¨ÕâÑùµÄÊÂÇé´øÀ´µÄ¸±×÷ÓÃÊÇʲô¡£
ËùÒÔ¿ÉÒÔÕâô˵£¬µ±×é¼þµÄ״̬ÒòΪһЩÍâ½çÒòËØ¸Ä±äµÄʱºò£¬Õâ¾Í¿ÉÒÔ³Æ×÷¸±×÷Óá£
ºÃÁË£¬ÎÒÃÇ¿ÉÒÔ»ØÕýÌâÁË¡£¼ÌÐøÀ´¿´`useEffect`Õâ¸öHook¡£
ÔÚʹÓú¯Êý×é¼þʱ£¬ÎÒÃDz»ÔÙʹÓÃÉúÃüÖÜÆÚ¹³×Óº¯Êý£¬ÀýÈç `componentDidMount`£¬`componentDidUpdate`µÈ¡£Òò´Ë£¬¿ÉÒÔÕâô˵£¬`useEffect` Hook ´úÌæÁË֮ǰÎÒÃÇÓõ½µÄReact¹³×Óº¯Êý¡£
ÈÃÎÒÃDZȽÏһϻùÓÚÀàµÄ×é¼þºÍ`useEffect` HooksµÄʹÓ÷½Ê½
import React, { Component } from 'react';
class App extends Component {
componentDidMount() {
console.log('I have just mounted!');
}
render() {
return <div>Insert JSX here</div>;
}
}
ÓÃÁË`useEffect`Ö®ºó
function App() {
useEffect(() => {
console.log('I have just mounted!');
});
return <div>Insert JSX here</div>;
}
ÔÚ¼ÌÐøÍùÏÂ֮ǰ£¬ÎÒÃDZØÐëÒªÖªµÀÒ»¼þʶù£¬ÔÚĬÈÏÇé¿öÏ£¬`useEffect` Hook ÔÚÿ´ÎäÖȾºÍÖØÐÂäÖȾʱ¶¼»áÖ´ÐС£
Òò´Ë£¬Ö»Òª×é¼þÖеÄ״̬·¢Éú±ä»¯»ò×é¼þÊÕµ½ÐµÄ`props`ʱ£¬×é¼þ¶¼»áÖØÐÂäÖȾ²¢µ¼ÖÂ`useEffect Hook ÔÙ´ÎÔËÐС£
Äܲ»ÄÜÖ»Ö´ÐÐÒ»´ÎuseEffect (¾ÍÏñ componentDidMount Ò»Ñù)
Èç¹û `useEffect` Hook ÔÚ×é¼þÿ´ÎäÖȾʱ¶¼ÔËÐУ¬ÄÇôÎÒÃÇÔõô²ÅÄÜ×öµ½ Hook ÔÚ¹ÒÔØ×é¼þʱ½öÔËÐÐÒ»´Î£¿
ÀýÈ磬Èç¹û×é¼þ´Ó½Ó¿Ú»ñÈ¡Êý¾Ý£¬ÎÒÃǿ϶¨²»Ï£Íûÿ´ÎÖØÐÂäÖȾ×é¼þʱ¶¼È¥ÖØÐÂÇëÇóÏÂÊý¾Ý°É£¿
`useEffect()` ¹³×Ó½ÓÊܵڶþ¸ö²ÎÊý£¬ÊÇÒ»¸öÊý×飬ÆäÖаüº¬µ¼Ö `useEffect` ¹³×ÓÔËÐеÄÒÀÀµÏîµÄÁÐ±í¡£µ±ÕâЩÒÀÀµÏî¸ü¸Äʱ£¬Ëü½«´¥·¢ Effect Hook¡£Èç¹ûÏëÒªÖ»ÔËÐÐÒ»´Î Effect Hook£¬ÄÇÖ±½Ó¸øËû´«µÝÒ»¸ö¿ÕÊý×飬¾ÍOKÀ²£¡£¡
useEffect(() => {
console.log('This only runs once');
}, []);
Õâ¾ÍÒâζ×Å useEffect Hook ½«ÔÚµÚÒ»´ÎäÖȾʱÕý³£ÔËÐС£È»¶ø£¬µ±ÄãµÄ×é¼þÖØÐÂäÖȾʱ£¬useEffect »áÏë “ºÃ°É£¬ÎÒÒѾÔËÐÐÁË£¬Êý×éÖÐɶҲûÓУ¬ÎÒûɶÒÀÀµÏ˱䶼¸úÎÒû¹ØÏµÁË£¬ËùÒÔÎÒ²»±ØÔÙÔËÐÐÁË¡£” È»ºó¾ÍʲôҲ²»×öÁË¡£
×ܽ᣺ ¿ÕÊý×é¾ÍÒâζ×ÅuseEffect HookÖ»ÔÚ¹ÒÔØÊ±ÔËÐÐÒ»´Î
µ±ÓÐÄÚÈݸüÐÂʱʹÓÃeffect (¾ÍÏñcomponentDidUpdateÒ»Ñù)
ÎÒÃÇÒѾ½éÉÜÁËÈçºÎÈ·±£ useEffect Hook½öÔËÐÐÒ»´Î£¬µ«Êǵ±ÎÒÃǵÄ×é¼þÊÕµ½Ð嵀 `props` ʱ¸ÃÔõô°ì£¿ »òÕßÎÒÃÇÒªÔÚ״̬¸ü¸ÄʱÔËÐÐһЩ´úÂ룿 ÆäʵHooks Ò²ÄÜ´¦Àí£¡
useEffect(() => {
console.log("The name props has changed!")
}, [props.name]);
Çë×¢Ò⣬Õâ´ÎÎÒÃÇÈçºÎ½«¶«Î÷´«µÝ¸øuseEffectÊý×éµÄ£¬`props.name`¡£
ÔÚÕâÖÖÇé¿öÏ£¬useEffect Hook ½«ÏñÍù³£Ò»ÑùÔÚÊ״μÓÔØÊ±ÔËÐС£ ÿµ±ÄúµÄ×é¼þ´ÓÆä¸¸×é¼þÊÕµ½ÐµÄ`props.name`ʱ£¬¶¼»á´¥·¢useEffect Hook£¬²¢ÇÒÔËÐÐÆäÖеĴúÂë¡£
ÎÒÃÇÒ²¿ÉÒÔʹÓÃ״̬±äÁ¿À´×öͬÑùµÄÊÂÇ飺
const [name, setName] = useState("Chris");
useEffect(() => {
console.log("The name state variable has changed!");
}, [name]);
ÿµ±`name`·¢Éú±ä»¯Ê±£¬×é¼þ¾Í»áÖØÐÂäÖȾ £¬useEffect Hook ¾Í»áÔËÐв¢Êä³öÏûÏ¢¡£¶øÇÒÒòΪÕâÊÇÒ»¸öÊý×飬ÎÒÃÇÆäʵ¿ÉÒÔÏòËüÌí¼Ó¶à¸ö¶«Î÷£º
const [name, setName] = useState("Chris");
useEffect(() => {
console.log("Something has changed!");
}, [name, props.name]);
ÕâÑù£¬µ± `name` ״̬±äÁ¿¸ü¸Ä»ò `props.name` ¸ü¸Äʱ£¬useEffect Hook ¶¼½«ÔËÐв¢ÏÔʾ¿ØÖÆÌ¨ÏûÏ¢¡£
ÄÇÎÒÃÇÄÜÓÃcomponentWillUnmountÂð£¿
ÏëÒªÔÚ×é¼þ¼´½«Ð¶ÔØÊ±ÔËÐÐÒ»¸öHook£¬ÎÒÃÇÖ»Ðè´Ó`useEffect` Hook ·µ»ØÒ»¸öº¯Êý
useEffect(() => {
console.log('running effect');
return () => {
console.log('unmounting');
};
});
ÄÇÎÒÃÇ¿ÉÒÔ¶à¸ö²»Í¬µÄ Hooks Ò»ÆðʹÓÃÂð£¿
µ±È»! Äã¿ÉÒÔÔÚ×é¼þÖÐʹÓÃÈÎÒâÊýÁ¿µÄHooks£¬²¢¸ù¾ÝÐèÒª»ìºÏʹÓÃ
function App = () => {
const [name, setName] = useState();
const [age, setAge] = useState();
useEffect(()=>{
console.log("component has changed");
}, [name, age])
return(
<div>Some jsx here...<div>
)
}
С½á- ½ÓÏÂÀ´¸ÉɶĨ£¿
ÄãÕâ²»ÒѾѧ»áReact HooksÁËô£¬HooksÔÊÐíÎÒÃÇʹÓÃÀÏʽµÄJavaScriptº¯ÊýÀ´´´½¨¸ü¼òµ¥µÄReact×é¼þ£¬²¢¼õÉÙ´óÁ¿´úÂë¡£
½ÓÏÂÀ´£¬ÊÖ²»Ñ÷Ñ÷ô£¿µ±È»ÊÇ×Ô¼º¸Ï½ô¶¯ÊÖÄÇHooks×öÏîÄ¿ÌåÑéÈ¥°¡£¡
²ÂÄãϲ»¶£º
HTML5ʲôÓÅÊÆÓÐÄÄЩ?
ʲôÊÇHTML£¬Ê²Ã´ÊÇH5?
JavaScriptÊÇʲô?¿ÉÒÔ×öʲô?