美文网首页
react之state

react之state

作者: 成熟稳重的李先生 | 来源:发表于2020-09-06 20:25 被阅读0次

在vue中,在不考虑vuex的时候,组件的数据来源有两个, props和data。而在react中组件的数据来源也是两个,props和state
props一经传入,那么便不能改变,state可以通过setState方法来改变。每次setState后,组件会重新渲染,如果setState的值和原state相同,组件也会重新渲染(这点与vue不一样)。

组建的声明周期

  • componentDidMount
    同vue中的mounted,组件挂载完成之后执行

react中的组件更新可以由用户来控制,而vue因为使用了Object.defineProperty,在语法层面上控制其是否执行,react中的生命周期钩子 shouldComponentUpdate交给用户来控制其更新逻辑

  • shouldComponentUpdate
    接收两个参数,nextPropsnextState,新的props和新的state。
    要改变状态时:
 shouldComponentUpdate(nextProps, nextState) {
    return true;
}
  • state
  1. 永远不要直接修改state,只能在初始化时赋值,使用setState来改变它
  2. state的更新会合并,如果state中有属性a,b,并且在组件代码中,都由用到,当setState时,只是传入了{b: xxx},那么上次的a还是会被保留,b被更新,相当于Object.assign
    3.setState可以接收对象或者函数,接收对象时,将这个对象和之前的state合并,作为新的state。接收函数时,传入老的state,返回新的state;
  3. state的更新可能是异步的(这点和Vue有点像,vue中组件更新前,也会将状态改变合并起来)
    1. setState时,默认时批量更新模式batchUpdate,此种模式下,状态不会立刻更新,而是缓存起来放到一个队列里,等事件处理函数完成后才执行更新
    2. 如果写在setTimeout里,会立即更新
class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = { date: new Date() };
  }
  componentDidMount() {
    this.timer = setInterval(this.tick, 1000);
  }
  shouldComponentUpdate(nextProps, nextState) {
    return this.state !== nextState;
  }
  tick = () => {
    // this.setState({date: new Date()}); //一般会这样写
    this.state.date = new Date(); //
    this.setState(this.state); //像这样,即使this.state的引用没变, 也会触发更新
  };
  render() {
    return (
      <div>
        <p>当前时间是:</p>
        {this.state.date.toLocaleString()}
      </div>
    );
  }
}

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

SPA中,每个组件中销毁前都需要清除定时器和绑定在window等dom上的事件,一是为了不报错,而是避免内存泄漏
vue中我们再beforeDestory中清除,而在react中有componentWillUnmount

相关文章

  • React之State

    State 如何组织数据是程序的最重要问题。Raect组件的数据分为两种:prop和state。无论prop还是s...

  • react之state

    在vue中,在不考虑vuex的时候,组件的数据来源有两个, props和data。而在react中组件的数据来源也...

  • react学习笔记--state以及setState

    在react中通过state以及setState() 来控制组件的状态。 state state 是 react ...

  • React Native 学习之路

    React 相关资料 React Components React Properties React State ...

  • react源码剖析——(二)解密setState机制

    state是React中重要的概念。总所周知,React通过this.state来访问state,通过this.s...

  • React hooks之useRef

    接react hooks之effect、state[https://www.jianshu.com/p/b493a...

  • React基础

    react 教程 react 组件介绍 react state 介绍 react Props 介绍 React:组...

  • React之状态(State)

    在React当中,当你更新组件的state,然后新的state就会重新渲染到页面中。在这个时候不需要你操作任何DO...

  • 004|React之State

    在JSX中,每一个组件除了props属性外,还有一个state属性。注意state全部为小写。 例如,下面的代码中...

  • 浅谈react中的state和props

    1、state的作用 state是React中组件的一个对象,React中,更新组件的state,会导致重新渲染用...

网友评论

      本文标题:react之state

      本文链接:https://www.haomeiwen.com/subject/ojkcektx.html