(1). Hook是React 16.8.0版本增加的新特性/新语法
(2). 可以让你在函数组件中使用 state 以及其他的 React 特性
貌似现在更多的也是使用函数式组件的了,重要
import React from 'react'
function Demo(){//console.log('Demo');const [count,setCount] = React.useState(0)//加的回调function add(){//setCount(count+1) //第一种写法setCount(count => count+1 )}return (当前求和为:{count}
)
}export default Demo
React.useState()可以使得函数式组件也能类似于类式组件使用操作state了
(1). 语法: const [xxx, setXxx] = React.useState(initValue)
(2). useState()说明:
参数: 第一次初始化指定的值在内部作缓存
返回值: 包含2个元素的数组, 第1个为内部当前状态值, 第2个为更新状态值的函数
(3). setXxx()2种写法:
setXxx(newValue): 参数为非函数值, 直接指定新的状态值, 内部用其覆盖原来的状态值
setXxx(value => newValue): 参数为函数, 接收原本的状态值, 返回新的状态值, 内部用其覆盖原来的状态值
(1). Effect Hook 可以让你在函数组件中执行副作用操作(用于模拟类组件中的生命周期钩子)
(2). React中的副作用操作:
发ajax请求数据获取
设置订阅 / 启动定时器
手动更改真实DOM
我理解的就是effect hook让函数式组件能在原本没有过的特定的生命周期中执行操作。
语法和说明:
useEffect(() => {
// 在此可以执行任何带副作用操作
return () => { // 在组件卸载前执行
// 在此做一些收尾工作, 比如清除定时器/取消订阅等
}
}, [stateValue]) // 如果指定的是[], 回调函数只会在第一次render()后执行
第二个参数不传的话
import React from 'react'
function Demo(){//console.log('Demo');const [count,setCount] = React.useState(0)React.useEffect(()=>{console.log('###')// let timer = setInterval(()=>{// setCount(count => count+1 )// },1000)// return ()=>{// clearInterval(timer)// }})//加的回调function add(){//setCount(count+1) //第一种写法setCount(count => count+1 )}return (当前求和为:{count}
)
}export default Demo
React.useEffect相当于在第一次更新完成和数据更新的时候会被调用
如果传的是空数组,
相当于只有在第一次更新完成才会触发
如果数组中传了参数,例如例子中的count
React.useEffect相当于在第一次更新完成和数据count更新的时候才会被调用。
其实React.useEffect还有个时期也会执行,在第一个参数中,如果有return一个回调的话
import React from 'react'import root from '../../index'function Demo(){//console.log('Demo');const [count,setCount] = React.useState(0)React.useEffect(()=>{console.log('###')let timer = setInterval(()=>{setCount(count => count+1 )},1000)return ()=>{console.log('bbb')// clearInterval(timer)}},[])//加的回调function add(){//setCount(count+1) //第一种写法setCount(count => count+1 )}//卸载组件的回调function unmount(){//react17写法//ReactDOM.unmountComponentAtNode(document.getElementById('root'))//react18写法root.unmount(document.getElementById('root'))}return (当前求和为:{count}
)
}export default Demo
可以看到在组件卸载前React.useEffect又被调用了一次。所以,React.useEffect可以看成是componentDidMount(),componentDidUpdate(),componentWillUnmount() 三个函数的组合。有点妙
(1). Ref Hook可以在函数组件中存储/查找组件内的标签或任意其它数据
(2). 语法: const refContainer = useRef()
(3). 作用:保存标签对象,功能与React.createRef()一样
这个相对简单点
import React from 'react'
function Demo(){const myRef = React.useRef()//提示输入的回调function show(){alert(myRef.current.value)}return (myRef}/>)
}export default Demo