LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

Reast自学篇-4

Reast自学篇-4

阿巴阿巴

突然感觉最近很emo

状态

关于什么是状态

React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。

React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM)。

以下实例创建一个名称扩展为 React.Component 的 ES6 类,在 render() 方法中使用 this.state 来修改当前的时间。

添加一个类构造函数来初始化状态 this.state,类组件应始终使用 props 调用基础构造函数。

组件的状态就和我们前面说的类组件有关了,我们在上一章讲到了,函数组件是无状态的(除非用hook),类组件才有状态,有了状态,我们才能对里面的数据进行动态修改,否则就和常量一样,渲染即为固定了

React渲染状态

这里是本人个人理解哈,不代表最终效果

React在对组件进行操作的时候,就需要定义状态了,我们需要提前去对一个组件进行定义,比如这样

image-20220428182320863

在这里,我们对于状态的定义就需要包含名字,学号等信息,状态就是用于存放这些的”变量”的,因此在设计组件的时候,就需要及时的去定义

至于定义的方法可以看这里

如何定义状态(state)

定义状态的代码如下

class OPENButton extends React.Component {
    state = {
        type: false
    }
    render () {
        return (
            <div>
                <div>
                    当前组件状态为:{String(this.state.type)}
                </div>
            </div>
        )
    }

}

看起来就像定义了一个map?其实也差不多,React中利用变量state来存放我们对应的变量,同时,在这里面的变量被修改后才会被刷新

如何调用这些变量呢?

调用这些变量的不能直接调,需要加上this才可以调用,不然会空指针,同时,state只能存在于组件之中,不能存在外面(这也从另一个方面说明组件与状态的绑定关系),我们具体来看下如何调用

import React from "react"
class OPENButton extends React.Component {
    state = {
        type: false
    }
    render () {
        return (
            <div>
                <div>
                    当前组件状态为:{String(this.state.type)}
                </div>
            </div>
        )
    }
}
function App2 () {
    return (
        <div>
    <OPENButton></OPENButton>   
        </div>
    )
}
export default App2

this.state.type这里就是调用了,我们这里必须要this去调用,并且通过.去获取内部的内容(当然还是要走JSX)

如何修改这些变量

修改这些变量其实就是对整个组件进行修改渲染,具体流程如下

当调用setState时,会重新执行render函数,根据最新的State(就是我们用this调用哪个)来创建ReactElement对象;然后再根据最新的ReactElement对象,对DOM进行修改

当然,我们具体到代码层,就是调用个代码的事情this.setState({key,value})

[scode type=”yellow”]务必注意,千万别去直接修改state的值,不然没法刷新对象[/scode]

我们看下代码,就很简单了

import React from "react"
class OPENButton extends React.Component {
    state = {
        type: false
    }
    switchType = (e, numbers) => {
        console.log(e)
        console.log(numbers)
        if (this.state.type === false) {
            this.setState({ type: true })
        } else {
            this.setState({ type: false })
        }
    }
    render () {
        return (
            <div>
                <div>
                    当前组件状态为:{String(this.state.type)}
                </div>
                <button onClick={(e) => this.switchType(e, 122)}>切换组件状态</button>
            </div>
        )
    }
}
function App2 () {
    return (
        <div>
            <OPENButton></OPENButton>

        </div>
    )
}
export default App2

当我们点击按钮后,我们的this.state.type就会改变,从而修改我们div中输出的内容

最终效果,就变成这样了

点击前

点击后

这就完成了组件的修改,简单吧(笑)

img_show