react State & 生命周期

state

State 与 props 类似,但是 state 是私有的,并且完全受控于当前组件。

将函数组件转换成 class 组件

通过以下五步将函数组件转成 class 组件:

1.创建一个同名的 ES6 class,并且继承于 React.Component。
2.添加一个空的 render() 方法。
3,将函数体移动到 render() 方法之中。
4.在 render() 方法中使用 this.props 替换 props。
5.删除剩余的空函数声明。

class Clock extends React.Component {
  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.props.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

向 class 组件中添加局部的 state

我们通过以下三步将 date 从 props 移动到 state 中
1.把 render() 方法中的 this.props.date 替换成 this.state.date
2.添加一个 class 构造函数,然后在该函数中为 this.state 赋初值
3.移除 Clock 元素中的 date 属性:

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

ReactDOM.render(
  <Clock />,
  document.getElementById('root')
);

将生命周期方法添加到 Class 中

componentDidMount() 方法会在组件已经被渲染到 DOM 中后运行
componentWillUnmount() 生命周期方法中清除计时器

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>
       <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
     </div>
   );
 }
}

ReactDOM.render(
 <Clock />,
 document.getElementById('root')
);

正确地使用 State

关于 setState() 你应该了解三件事:

不要直接修改 State使用 setState():

this.setState({comment: 'Hello'});

State 的更新可能是异步的

// Wrong
this.setState({
  counter: this.state.counter + this.props.increment,
});
// Correct
this.setState((state, props) => ({
  counter: state.counter + props.increment
}));

State 的更新会被合并

数据是向下流动的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React中的生命周期指的是组件在不同阶段执行的一系列方法。在React 16.3之前,生命周期分为三个阶段:Mounting(挂载)、Updating(更新)和Unmounting(卸载)。而在React 16.3及以后的版本中,生命周期被重新命名为挂载、更新和卸载,并引入了新的生命周期方法。 下面是React中常用的生命周期方法: 1. 挂载阶段(Mounting): - constructor:组件初始化时调用,用于初始化state和绑定事件处理函数。 - static getDerivedStateFromProps:组件实例化时和接收新的props时调用,用于根据props的变化来更新state。 - render:根据props和state渲染组件的UI。 - componentDidMount:组件挂载到DOM后调用,可以进行DOM操作或发起网络请求。 2. 更新阶段(Updating): - static getDerivedStateFromProps:组件接收到新的props时调用,用于根据props的变化来更新state。 - shouldComponentUpdate:决定是否重新渲染组件,默认返回true。可以通过比较props和state来优化性能。 - render:根据props和state渲染组件的UI。 - componentDidUpdate:组件更新后调用,可以进行DOM操作或发起网络请求。 3. 卸载阶段(Unmounting): - componentWillUnmount:组件即将从DOM中移除时调用,可以进行一些清理工作,如清除定时器、取消订阅等。 此外,React还引入了新的生命周期方法: - static getDerivedStateFromError:在子组件发生错误时调用,用于渲染错误界面。 - componentDidCatch:在子组件发生错误后调用,可以用来记录错误信息或发送错误报告。 需要注意的是,React 17已经宣布将废弃一些生命周期方法(如componentWillMount、componentWillReceiveProps、componentWillUpdate),并推荐使用新的生命周期方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值