美文网首页
react组件状态

react组件状态

作者: 胡齐峰 | 来源:发表于2020-11-04 08:35 被阅读0次

事件

  • 注意:组件事件需要配合状态
  • 事件需要写成onClick,否则react不认识
  • 事件接收的是一个函数,或者是函数变量,所以需要使用{ }
  • 在调用方法时,需要指定this指向,如果不指定的话就是underfind,需要使用es6中的bind进行this绑定。
  • 点击完成后,页面还不会重新渲染,因为现在a是在属性中的。只有state发生改变的时候才能会触发重新渲染。
class Cmp extends React.Component{
    constructor(...args){
        super(...args)
        this.a = 12
    }
    fn(){
        this.a = this.a+1;
    }
    render(){
        return (
            <div>
                <span>{this.a}</span>
                <input type="button" value="按钮" onClick={this.fn.bind(this)} />
            </div>
        )
    }
}
ReactDOM.render(<Cmp></Cmp>,document.getElementById('root'))

状态设置与改变

  • 状态的初始化只能在constructor中进行。
  • 如果在方法中直接修改state中的值的话,state中的值是会进行改变,但是不会触发渲染,只有使用setState才能触发渲染,下面代码中点击按钮1触发fn方法时,state中的a会加1但不会渲染。只有点击按钮2才会渲染。
class Cmp extends React.Component{
    constructor(...args){
        super(...args)
        this.state = {
            a:12
        }
    }
    fn(){
        //只改变state中的值但不会触发渲染
        this.state.a = this.state.a+1;
        console.log(this.state.a)
    }
    fn2(){
        //状态的设置必须要使用setState,否则不会触发渲染
        this.setState({
            a:this.state.a+1
        })
        console.log(this.state.a)
    }
    
    render(){
        //input可以使用单标签,此处是为了markdown代码高亮
        return (
            <div>
                <span>{this.state.a}</span>
                <input type="button" value="按钮1" onClick={this.fn.bind(this)}></input>
                <input type="button" value="按钮2" onClick={this.fn2.bind(this)} ></input>
            </div>
        )
    }
}
ReactDOM.render(<Cmp></Cmp>,document.getElementById('root'))

props变化引起重新渲染

  • props中传递的值在组件中时不能进行修改的,浏览器会报错。因为它是一个自读的

Uncaught TypeError: Cannot assign to read only property 'a' of object '#<Object>'

class Cmp extends React.Component{
    constructor(...args){
        super(...args)
    }
    fn(){
        this.props.a = this.props.a+1;
    }
    render(){
        return (
            <div>
                <span>{this.props.a}</span>
                <input type="button" value="按钮1" onClick={this.fn.bind(this)} ></input>
            </div>
        )
    }
}
  • 只有父级在传值发生改变的时候才会进行修改,下面代码中点击按钮1触发fn,通过改变父级state中的text值,而触发渲染。
class Parent extends React.Component{
    constructor(...args){
        super(...args)
        this.state={
            text:12
        }
    }
    fn(){
        this.setState({
            text:this.state.text + 1
        })
    }
    render(){
        return (
            <div>
                <Child text={this.state.text}></Child>
                <input type="button" value="按钮1" onClick={this.fn.bind(this)} ></input>
            </div>
        )
    }
}
class Child extends React.Component{
    constructor(...args){
        super(...args)
    }
    render(){
        return (
            <div>{this.props.text}</div>
        )
    }
}
ReactDOM.render(<Parent></Parent>,document.getElementById('root'))

react触发渲染的三种情况

  1. state使用setStates时;
  2. props传值发生改变时;
  3. 强制渲染调用this.forceUpdate()
class Cmp extends React.Component{
    constructor(...args){
        super(...args)
        this.a = 12
    }
    fn(){
        this.a = this.a+1;
        //强烈不建议使用,会严重的影响性能以及一些不可预知的错误。
        this.forceUpdate()
    }
    render(){
        return (
            <div>
                <span>{this.a}</span>
                <input type="button" value="按钮1" onClick={this.fn.bind(this)} ></input>
            </div>
        )
    }
}
ReactDOM.render(<Cmp a = {12}></Cmp>,document.getElementById('root'))

相关文章

  • React 进阶二 组件详解

    React组件 React的组件大概分为俩部分,无状态组件和有状态组件 无状态组件。下面React官网中定义的一个...

  • React学习知识小总结

    react依赖: react react-dom babel-preset-react 组件自身状态设置初始状态:...

  • React入门(二)

    三、React组件 React 组件基本上是由组件的构建方式、组件内的状态属性与生命周期方法组成 React.cr...

  • React概念

    React 的核心思想是:封装组件。各个组件维护自己的状态和 UI,当状态变更,自动重新渲染整个组件。 React...

  • react的受控组件和非受控组件

    受控组件就是可以被 react 状态控制的组件在 react 中,Input textarea 等组件默认是非受控...

  • React学习笔记_02

    React 组件和状态 react 组件 1,组件的两种创建方式1,函数组件2,类组件 1,函数组件:使用 JS ...

  • 组件分享之前端组件——用于表单状态管理和验证的 React Ho

    组件分享之前端组件——用于表单状态管理和验证的 React Hooks (Web + React Native) ...

  • React Hook

    简介 :原本函数组件和类组件同为react组件,但是由于函数组件为无状态组件,react hook 的引入,让函数...

  • react基础

    认识React 组件 Jsx的引用 插值符号 组件的数据状态 组件的样式 组件的事件 组件的生命周期 React的...

  • React 性能优化之 setState

    React 组件状态 React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不...

网友评论

      本文标题:react组件状态

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