React状态 react state

简介: React状态 react state

# 什么是状态管理工具?(vuex)


react state相当于vue的date,但是跟vue的用法不一致

constructor 属性返回对创建此对象的数组函数的引用


单组件化抽离



这种方式不推荐,已经耦合在一起了,再这样执行


import React from 'react'
import ReactDOM from 'react-dom'
// 类组件
class Clock extends React.Component{
  // 状态 (数据) --> view  状态到视图层
  // 如果重新执行,状态层不会重新获取,视图层会重新渲染
  // 状态层 数据层
  constructor(props) {
    super(props)
      this.state = {
          time: new Date().toLocaleTimeString()
      }
  }
  // 视图层
  render() {
    this.state.time = new Date().toLocaleTimeString() // 这样会执行  react里面不允许直接设置state的值(只是警告,不影响执行, 可是最好使用setState)
    return (
      <div>
          <h1>当前时间:{ this.state.time }</h1>
      </div>
    )
  }
}
React.render(<Clock />, document.getElementById('root'))
setInterval(() => {
  ReactDOM.render(<Clock />, document.getElementById('root'))
}, 1000)
复制代码


推荐的方式:


import React from 'react'
import ReactDOM from 'react-dom'
// 类组件
class Clock extends React.Component{
  // 状态 (数据) --> view  状态到视图层
  // 如果重新执行,状态层不会重新获取,视图层会重新渲染
  // 状态层 数据层
  // 构造函数初始化数据,将需要改变的初始化数据放到state中
  constructor(props) {
    super(props)
      this.state = {
          time: new Date().toLocaleTimeString()
      }
  }
  // 视图层
  render() {
    return (
      <div>
          <h1>当前时间:{ this.state.time }</h1>
      </div>
    )
  }
  // 生命周期函数  component 组件  DidMount 渲染完成时
  componentDidMount() {
    // setInterval(() => { this.state.time = new Date().toLocaleTimeString() }, 1000) // 错误写法 不推荐 不会更新state里面的值
    // 切勿直接修改state数据,直接state重新渲染内容,需要使用setState
    // 通过this.setState修改完数据后,并不会立即修改DOM里面的内容,react会在这个函数内容所有设置状态改变后,
    // 统一对比虚拟DOM对象,然后再统一修改,提升性能
    // 小程序也是借鉴react的state状态管理操作
    setInterval(() => { this.setState({ time: new Date().toLocaleTimeString() }) }, 1000)  // 正确写法
  }
}
ReactDOM.render(<Clock />, document.getElementById('root'))
复制代码


demo: 组件化 tab切换


import React from 'react'
import ReactDOM from 'react-dom'
import './Tab.css'
class Tab extends React.Component{
 constructor(props) {
   super(props)
     this.state = {
       c1: 'content active',
       c2: 'content'
     }
     this.clickEvent = this.clickEvent.bind(this)
 }
 // 点击事件
 clickEvent(e) {
   const index = e.target.dataset.index  // 获取data-index的值
   if(index == '1') {
     this.setState({
       c1: 'content',
       c2: 'content active'
     })
   } else {
     this.setState({
       c1: 'content active',
       c2: 'content'
     })
   }
 }
 render() {
   return (
     <div>
       <button data-index="1" onClick={ this.clickEvent }>内容一</button>
       <button data-index="2" onClick={ this.clickEvent }>内容二</button>
       <div className={ this.state.c1 }>
         <h1>内容1</h1>
       </div>
       <div className={ this.state.c2 }>
         <h1>内容2</h1>
       </div>
     </div>
   )
 }
}
ReactDOM.render(<Tab />, document.getElementById('root')



相关文章
|
2月前
|
前端开发 JavaScript
学习react基础(3)_setState、state、jsx、使用ref的几种形式
本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。
68 3
学习react基础(3)_setState、state、jsx、使用ref的几种形式
|
2月前
|
前端开发
学习react基础(2)_props、state和style的使用
本文介绍了React中组件间数据传递的方式,包括props和state的使用,以及如何在React组件中使用style样式。
33 0
|
1月前
|
前端开发 JavaScript 调度
React 组件状态(State)
10月更文挑战第8天
25 1
|
3月前
|
前端开发
React组件实例更改state状态值(四)
【8月更文挑战第14天】React组件实例更改state状态值(四)
38 1
React组件实例更改state状态值(四)
|
3月前
|
前端开发 JavaScript
React组件实例state(三)
【8月更文挑战第14天】React组件实例state(三)
30 1
React组件实例state(三)
|
6月前
|
存储 前端开发 API
第六章 react组件实例中三大属性之State
第六章 react组件实例中三大属性之State
|
2月前
|
前端开发
React使用hooks遇到的坑_state中的某几个属性数据变成了空字符
本文讨论了在React使用hooks时遇到的一个问题:state中的某些属性数据变成了空字符。作者通过在修改函数中重新解构赋值来获取最新的state值,解决了因数据更新不及时导致的问题。
69 0
|
3月前
|
存储 前端开发
React 中的 state 和 props 有什么区别?
【8月更文挑战第31天】
43 0
|
4月前
|
存储 前端开发 JavaScript
前端框架与库 - React基础:组件、Props、State
【7月更文挑战第12天】React是JavaScript库,专注UI构建,基于组件化。组件是UI模块,可函数式或类定义。Props是组件间安全传递数据的只读参数,用defaultProps和propTypes保证正确性。State则是组件内部可变数据,用于驱动更新。使用setState()确保正确变更和渲染。了解并妥善处理这些概念是高效React开发的基础。
71 7
|
5月前
|
存储 前端开发 JavaScript
React中有效地使用props和state来管理组件的数据和行为
React中有效地使用props和state来管理组件的数据和行为