深入理解 useEffect
class Example extends Component { constructor (props) { super(props); this.state = { count: 0 } } render() { return ( <div> <p>点击{this.state.count}次</p> <button onClick={() => this.setState({count: this.state.count + 1})}> 点击 </button> </div> ); } }
类组件和函数组件
function Example () { const [count, setCount] = useState(0); return ( <div> <p>点击{count}次</p> <button onClick={() => setCount(count + 1)}> 点击 </button> </div> ) }
生命周期上的功能转移到 useEffect
里面实现
class Example extends Component { constructor (props) { super(props); this.state = { count: 0 } } componentDidMount() { document.title = `点击${this.state.count}次` } componentDidUpdate(prevProps, prevState) { document.title = `点击${this.state.count}次` } render() { return ( <div> <p>点击{this.state.count}次</p> <button onClick={() => this.setState({count: this.state.count + 1})}> 点击 </button> </div> ); } } function Example () { const [count, setCount] = useState(0); useEffect(() => { document.title = `点击${count}次` }) return ( <div> <p>点击{count}次</p> <button onClick={() => setCount(count + 1)}> 点击 </button> </div> ) }
- 在 class 组件中,我们可以通过在
componentDidUpdate
中添加对prevProps
或prevState
的比较逻辑解决 - 你可以通知 React 跳过对 effect 的调用,只要传递数组作为 useEffect 的第二个可选参数即可
class Example extends Component { constructor (props) { super(props); this.state = { count: 0 } } componentDidMount() { document.title = `点击${this.state.count}次` } componentDidUpdate(prevProps, prevState) { if (prevState.count !== this.state.count) { document.title = `点击${this.state.count}次` } } render() { return ( <div> <p>点击{this.state.count}次</p> <button onClick={() => this.setState({count: this.state.count + 1})}> 点击 </button> </div> ); } } function Example () { const [count, setCount] = useState(0); useEffect(() => { document.title = `点击${count}次` }, [count]) return ( <div> <p>点击{count}次</p> <button onClick={() => setCount(count + 1)}> 点击 </button> </div> ) }
传入 []
作为第二个参数更接近大家更熟悉的 componentDidMount
和 componentWillUnmount
思维模式
组件加载启动一个定时器,组件销毁清除定时器
function Example () { const [count, setCount] = useState(0); useEffect(() => { const timer = setInterval(() => { console.log(1) }, 1000) return () => clearInterval(timer) }, []) return ( <div> <p>点击{count}次</p> <button onClick={() => setCount(count + 1)}> 点击 </button> </div> ) }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: 彻底掌握 useRef 的使用技巧
下一篇: 不要相信一个熬夜的人说的每一句话
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论