12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import { useEffect, useState } from 'react';
- function MsgItem({ text, title }) {
- // 3 组件卸载前执行
- useEffect(() => {
- //
- return () => {
- // 这里返回的回调 会在组件卸载前执行
- // 可以在这里清除一些『垃圾』
- console.log('MsgItem卸载了');
- };
- }, []);
- return (
- <div>
- <h3>{title}</h3>
- <p>{text}</p>
- </div>
- );
- }
- export default function TestUseEffect({ name }) {
- let [msg, setMsg] = useState('啥也没有');
- // 1 每一次组件渲染 都有执行一些代码
- useEffect(() => {
- // 编写那些副作用代码
- // console.log('==组件渲染==');
- });
- // 2 模拟 componentDidMount
- useEffect(() => {
- console.log('===组件渲染后===');
- }, []);
- // 4 监听state或者props变化,执行setup(组件首次渲染 也会执行setup)
- useEffect(() => {
- console.log('msg变化了');
- }, [msg, name]);
- return (
- <div>
- <h3>useEffect</h3>
- <div>{msg && <MsgItem text={msg} title={'注意'} />}</div>
- <p>
- {msg}: {name}
- </p>
- <p>
- <button
- onClick={() => {
- setMsg(Math.random() + '');
- }}
- >
- change
- </button>
- </p>
- </div>
- );
- }
|