react 响应式数据

1.class组件

调用setState修改
1.setState是异步的,多次调用会合并为一次
2.修改同样数值的数据,仍会触发更新(解决方案:使用PureComponent)
  class Cc extends React.Component {
    state = {
      a: 1,
      c: [1, 2, 3]
    }
    fix() {
      // 调用setState修改
      // 1.setState是异步的,多次调用会合并为一次
      // 2.修改同样数值的数据,仍会触发更新(解决方案:使用PureComponent)
      this.setState({
        a: this.state.a + 1
      }, () => {
        // 得到异步后的值
        console.log(this.state)
      })
      console.log(this.state)
    }
    fixArr() {
      // 在PureComponent下,数组和对象判断是否改变,由其内存地址判断
      // 一般先拷贝一份,再进行操作
      let _arr = [...this.state.c]
      _arr.push(4)
      this.setState({
        c: _arr
      })
    }
    render() {
      console.log(1)
      return <div>
        <Button type="primary">class组件</Button>
        <div>{this.state.a}</div>
        <div>{this.state.c}</div>
        <Button type="primary" onClick={this.fix.bind(this)}>修改数据</Button>
        <br></br>
        <Button type="primary" onClick={this.fixArr.bind(this)}>修改数组</Button>
      </div>
    }
  }

2.函数组件

借用useState hook来解决响应式问题

  let [mes, setMsg] = useState(111)
  // mes值本身
  // setMsg修改方法
  function fixMsg() {
    setMsg(mes+1)
  }
  return <div className={styles.container}>
    <div>响应式数据</div>
    <Button type="primary">函数组件</Button>
    <div>{mes}</div>
    <Button type="primary" onClick={fixMsg}>修改数据</Button>
    <Cc></Cc>
  </div>

 

posted on 2021-03-26 10:42  sss大辉  阅读(72)  评论(0编辑  收藏  举报

导航