react中数据承载的两种方式(props和state)

props: 自己可以设置默认属性,也可以从外部传入属性,但是外部传入的属性,自己只能用,不能用来修改

state: 一般由自己控制,自己可以进行状态的更改。

state状态

类组件

一般书写:

  • 状态一般放在constructor进行定义的

  • react中推荐采用setState,就可以实现数据改变,视图更新操作了

  • setState方法是异步的,如果想要获取更新后的最新状态,需要写在第二个参数中

    this.setState({
       		count: this.state.count+1
       },()=>{
             console.log(this.state.count)
      })
    
let a = 1
class Counter extends React.Component{
	constructor(){
        super()
        this.state={
			count:1
        }
	}
    handleClick=()=>{
    
    //这种形式的 setState() 也是异步的,并且在同一周期内会对多个 setState 进行批处理
		thuis.setState({
			count:this.state.count+1
		})
    }
	render(){
		return(
			<div>
				<p>counter=============== {this.state.count}</p>    
                <button onClick={this.handleClick}>更改counter</button>
			</div>
		)
	}
}
这种形式的 setState() 也是异步的,并且在同一周期内会对多个 setState 进行批处理
                 Object.assign() 
                 this.setState({
                    count:this.state.count+1
                })
                this.setState({
                    count:this.state.count+1
                })
                this.setState({
                    count:this.state.count+1
                }) 

如果后续状态取决于当前状态,我们建议使用 updater 函数的形式代替(里面出入参数,每次执行当前的都是在执行完上一个的基础上执行的)

                this.setState((prevState)=>{
                    return {
                        count: prevState.count+1
                    }
                },()=>{
                    console.log(this.state.count)
                })
                this.setState((prevState)=>{
                    return {
                        count: prevState.count+1
                    }
                })
                this.setState((prevState)=>{
                    return {
                        count: prevState.count+1
                    }
                })

函数组件应用state

在类组件中,我们可以在构造函数中 this.state = {count:1}

在函数式组件中,如何定义组件状态呢?

可以采用React 16.8 useState 这个hooks来去解决

const App=props=>{
        //定义了一个状态 count=1
        //定义了一个更改状态的方法 setCount
        const [count,setCount] = React.useState(1)

        return(
            <div>
                App------{count}    
                <p onClick={()=>{setCount(count+1)}}>数字加一</p>
            </div>
        )
    }
posted @ 2020-09-01 21:52  seekHelp  阅读(314)  评论(0编辑  收藏  举报