十六、Hooks
一、StateHook
1 import React from 'react' 2 3 function Demo(){ 4 const [count, setCount] = React.useState(0) 5 6 function add(){ 7 // 第一种写法 8 // setCount(count + 1) 9 10 // 第二种写法:函数 11 setCount(count => count + 1) 12 } 13 return( 14 <div> 15 <h2>当前求和为:{count}</h2> 16 <button onClick={add}>点我+1</button> 17 </div> 18 ) 19 } 20 export default Demo
二、EffectHook
1 React.useEffect(() => { 2 // 副作用操作:第一次挂载和之后更新都会执行 3 // return返回值:组件卸载前执行,做一些收尾工作,如清除定时器、取消订阅 4 },[]) // 如果指定的是[],回调函数只会在第一次render后调用
案例
1 import React from 'react' 2 import ReactDOM from 'react-dom' 3 4 function Demo(){ 5 const [count, setCount] = React.useState(0) 6 7 React.useEffect(() => { 8 // 副作用操作 9 let timer = setInterval(() => { 10 setCount(count => count + 1) 11 },1000) 12 // 返回值:组件卸载前执行,做一些收尾工作,如清除定时器、取消订阅 13 return ()=> { 14 clearInterval(timer) 15 } 16 },[]) // 如果指定的是[],回调函数只会在第一次render后调用 17 18 function add(){ 19 setCount(count => count + 1) 20 } 21 22 // 卸载组件的回调 23 function unmount(){ 24 ReactDOM.unmountComponentAtNode( 25 document.getElelmentBeId('root') 26 ) 27 } 28 return( 29 <div> 30 <h2>当前求和为:{count}</h2> 31 <button onClick={add}>点我+1</button> 32 <button onClick={unmount}>卸载组件</button> 33 </div> 34 ) 35 } 36 export default Demo
三、RefHook
标记节点,功能与createRef一样
1 import React from 'react' 2 3 function Demo(){ 4 const [count, setCount] = React.useState(0) 5 const myRef = React.useRef() 6 7 function add(){ 8 setCount(count => count + 1) 9 } 10 function show(){ 11 console.log(myRef.current.value) 12 } 13 return( 14 <div> 15 <input type="text" ref={myRef}/> 16 <h2>当前求和为:{count}</h2> 17 <button onClick={add}>点我+1</button> 18 <button onClick={show}>点我提示数据</button> 19 </div> 20 ) 21 } 22 export default Demo