搞懂React的state和生命周期函数(lifecycle methods)

简介: State and Lifecycle何谓stateA component needs state when some data associated with it changes over time. For example, a Checkbox component might need isChecked in its state,组件内部涉及的数据会根据时间条件变化随着数据的变化,要相应的更新DOM此时:需要使用state去接收这些不断变化的数据,然后通过setState更新DOM

搞懂React的state和生命周期函数(lifecycle methods)



State and Lifecycle


何谓state


A component needs state when some data associated with it changes over time. For example, a Checkbox component might need isChecked in its state,


组件内部涉及的数据会根据时间条件变化


随着数据的变化,要相应的更新DOM


此时:需要使用state去接收这些不断变化的数据,然后通过setState更新DOM


何谓Lifecycle methods


Lifecycle methods are custom functionality that gets executed during the different phases of a component. There are methods available when the component gets created and inserted into the DOM (mounting), when the component updates, and when the component gets unmounted or removed from the DOM


组件的生命周期即组件从被创建、渲染插入DOM,从DOM中移除所经历的阶段


每个阶段都有对应的函数,你可以去做相应的操作,比如下面demo中,componentDidMount函数在组件被渲染进DOM时调用,componentWillUnmount函数在组件从DOM中移除时调用


state VS props


The most important difference between state and props is that props are passed from a parent component, but state is managed by the component itself. A component cannot change its props, but it can change its state.


props是由外部传入组件的,组件不能改变props

state是在组件内部进行管理的,组件可以改变 state


何谓单向数据流


父组件可以向子组件传值,反之不行。比如下面DEMO中:父组件Clock将自己state中存的date的值传给了子组件FormattedDate


官网DEMO:


// 子组件
function FormattedDate(props) {
  return <h2>It is {props.date.toLocaleTimeString()}.</h2>;
}
class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }
   // 生命周期函数
  componentDidMount() {  
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }
  componentWillUnmount() {
    clearInterval(this.timerID);
  }
  tick() {
    this.setState({
      date: new Date()
    });
  }
  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <FormattedDate date={this.state.date} />
      </div>
    );
  }
}
ReactDOM.render(
  <Clock />,
  document.getElementById('root')
);
目录
相关文章
|
1月前
|
前端开发 开发者
React 函数组件与类组件对比
【10月更文挑战第4天】本文详细比较了React中的函数组件与类组件。函数组件是一种简单的组件形式,以纯函数的形式返回JSX,易于理解与维护,适用于简单的UI逻辑。类组件则是基于ES6类实现的,需要重写`render`方法并能利用更多生命周期方法进行状态管理。文章通过示例代码展示了两者在状态管理与生命周期管理上的差异,并讨论了常见的问题如状态更新异步性与生命周期管理的复杂性,最后给出了相应的解决方法。通过学习,开发者可以根据具体需求选择合适的组件类型。
54 8
|
2月前
|
前端开发 JavaScript
学习react基础(3)_setState、state、jsx、使用ref的几种形式
本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。
66 3
学习react基础(3)_setState、state、jsx、使用ref的几种形式
|
1月前
|
前端开发 JavaScript
React 组件生命周期
React 组件生命周期
29 0
|
2月前
|
前端开发
学习react基础(2)_props、state和style的使用
本文介绍了React中组件间数据传递的方式,包括props和state的使用,以及如何在React组件中使用style样式。
31 0
|
12天前
|
前端开发 JavaScript
react 组件的生命周期
React组件的生命周期包括从创建到销毁的各个阶段,如挂载(mounting)、更新(updating)和卸载(unmounting)。每个阶段都有特定的方法,用于控制组件的行为和状态,确保高效、有序地渲染和管理UI。
|
1月前
|
前端开发 JavaScript 调度
React 组件状态(State)
10月更文挑战第8天
20 1
|
2月前
|
前端开发 JavaScript 区块链
react18函数组件+antd使用指南-使用代码集合以及报错记录汇总
本文介绍了多个React开发中常见的问题及其解决方案,包括但不限于:1)`useForm`实例未连接到任何`Form`元素的警告及解决方法;2)监听页面滚动事件的实现方式;3)React 18与antd 5.8.6中定制主题的方法;4)React结合antd 4.x版本自定义主题色的步骤;5)解决`ResizeObserver loop`相关报错的技巧;6)处理React设计表单时遇到的CDN资源加载失败问题;7)解决onClick事件传参问题;8)修复类型错误等。每部分均提供详细分析与实用代码示例,帮助开发者快速定位并解决问题。
45 2
|
2月前
|
XML JavaScript 前端开发
学习react基础(1)_虚拟dom、diff算法、函数和class创建组件
本文介绍了React的核心概念,包括虚拟DOM、Diff算法以及如何通过函数和类创建React组件。
26 2
|
2月前
|
前端开发 JavaScript 开发者
介绍一下React生命周期
介绍一下React生命周期
95 9
|
1月前
|
存储 前端开发 JavaScript
深入理解React组件的生命周期与Hooks
【10月更文挑战第7天】深入理解React组件的生命周期与Hooks
78 0