react中state和props的区别有哪些?


当前第2页 返回上一页

1

2

3

4

5

6

7

8

9

10

11

12

13

export default class ItemList extends React.Component{

  constructor(){

    super();

    this.state = {

      itemList:'一些数据',

    }

  }

  render(){

    return (

      {this.state.itemList}

    )

  }

}

首先,在组件初始化的时候,通过this.state给组件设定一个初始的state,在第一次render的时候就会用这个数据来渲染组件。

setState

state不同于props的一点是,state是可以被改变的。不过,不可以直接通过this.state=的方式来修改,而需要通过this.setState()方法来修改state

比如,我们经常会通过异步操作来获取数据,我们需要在didMount阶段来执行异步操作:

1

2

3

4

5

6

7

componentDidMount(){

  fetch('url')

    .then(response => response.json())

    .then((data) => {

      this.setState({itemList:item}); 

    }

}

当数据获取完成后,通过this.setState来修改数据状态。

当我们调用this.setState方法时,React会更新组件的数据状态state,并且重新调用render方法,也就是会对组件进行重新渲染。

注意:通过this.state=来初始化state,使用this.setState来修改stateconstructor是唯一能够初始化的地方。

setState接受一个对象或者函数作为第一个参数,只需要传入需要更新的部分即可,不需要传入整个对象,比如:

1

2

3

4

5

6

7

8

9

10

11

12

export default class ItemList extends React.Component{

  constructor(){

    super();

    this.state = {

      name:'axuebin',

      age:25,

    }

  }

  componentDidMount(){

    this.setState({age:18}) 

  }

}

在执行完setState之后的state应该是{name:'axuebin',age:18}

setState还可以接受第二个参数,它是一个函数,会在setState调用完成并且组件开始重新渲染时被调用,可以用来监听渲染是否完成:

1

2

3

this.setState({

  name:'xb'

},()=>console.log('setState finished'))

总结

state的主要作用是用于组件保存、控制以及修改自己的状态,它只能在constructor中初始化,它算是组件的私有属性,不可通过外部访问和修改,只能通过组件内部的this.setState来修改,修改state属性会导致组件的重新渲染。

区别

  • props是传递给组件的(类似于函数的形参),而state是在组件内部被组件自己管理的(类似于在一个函数内声明的变量)

  • state是组件自己管理数据,控制自己的状态,可变;props是外部传入的数据参数,不可变;

  • 没有state的叫做无状态组件,有state的叫做有状态组件;

  • 多用props,少用state。也就是多写无状态组件。

更多编程相关知识,请访问:编程教学!!

以上就是react中state和props的区别有哪些?的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

为什么React需要绑定this

React中如何导入图片

bootstrap有React版吗

React中什么叫子组件

React移动端框架有哪些

React设置文件路径别名的具体方法你知道么

win怎样升级React native 和node.js

zepto与React区别是什么

开发React用什么工具?

什么编辑器支持React

更多相关阅读请进入《React》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...