创建
const MyComponent = (props) => {
return <div>{props.message}</div>
}
const MyComponent = props => <div>{props.message}</div>
function MyComponent(props){
return <div>{props.message}</div>
}
使用 useEffect 模拟生命周期
使用 useEffect 模拟生命周期,取决于第二个参数
componentDidMount: 第二个参数为空数组
useEffect(() => {console.log('componentDidMount')}, [])
componentDidUpdate:
第二个参数不传则所有属性更新时都执行函数,传一个数组则数组内数据更新时执行函数,但是该在第一次渲染时也会执行
useEffect(() => {console.log('任意属性更新')})
useEffect(() => {console.log('m 与 n 更新')}, [m, n])
封装组件,使得第一次渲染时不执行函数,完全模拟 componentDidUpdate:
const useUpdate = (fn, dep) => {
const [count, setCount] = useState(0);
useEffect(() => {
setCount(x => x + 1); // 或 setCount(count + 1)
}, [dep]);
useEffect(() => {
if (count > 1) {
fn();
}
}, [count, fn]);
};
export default useUpdate;
componentWillUnmount
useEffect(() => {
console.log('componentDidMount');
return () => {
console.log('componentWillUnmount')
}
})
shouldComponentUpdate:使用 React.memo, useMemo 解决
- constructor:函数执行时相当于 constructor
- render:函数返回值就是 render 的返回值