在学习和使用react构建项目的时候,一定会使用到组件的概念,为了某个模块的多次使用,通常会进行组件的复用,这时候就会涉及到组件之间的值的传递,在React中state是无法传递的,组件之间的通信通过props进行,简单来说他们的区别如下:

state 的主要作用是用于组件保存、控制、修改自己的可变状态。state 在组件内部初始化,可以被组件自身修改,而外部不能访问也不能修改。你可以认为 state 是一个局部的、只能被组件自身控制的数据源。state 中状态可以通过 this.setState 方法进行更新,setState 会导致组件的重新渲染。

props 的主要作用是让使用该组件的父组件可以传入参数来配置该组件。它是外部传进来的配置参数,组件内部无法控制也无法修改。除非外部组件主动传入新的 props,否则组件的 props 永远保持不变。

举个例子,一个组件ShowList中引用了antd的另一个组件Drawer

class ShowList extends React.Component {state = {isOpen: false,};triggerDrawer = () => this.setState({ isOpen: !this.state.isOpen });render() {const { isOpen } = this.state;return (<DrawerclassName="drawer-list"maskStyle={{ backgroundColor: 'rgba(240, 242, 245, 0.8)' }}title={<h4>List</h4>}visible={isOpen}width="25%"onClose={this.triggerDrawer}destroyOnClose><h2>content</h2></Drawer>)}
}

Drawer是antd的一个组件,翻译过来就是抽屉,用来在指定位置拉出一个面板,类似dialog模态框,但是样式和动画都会好很多,官方的api中有visable用于指定drawer的显示与否

包括onClose的回调函数

在这里用了state中的对象去控制组件的显示,关闭时再通过调用triggerDrawer函数让组件的visable状态变为false,上面说过,setState 会导致组件的重新渲染,以达成想要的效果,这就是state的基本用法。

而props的工作就是传递参数,如果另一个组件MainPage要向ShowList中传递drawer中的content要怎么写呢

class MainPage extends React.Component {render() {const content = <h2>content</h2>;return (<ShowList content = {content} />)}
}

这样就可以把content对象传入到ShowList组件的props中,这样就可以在ShowList中去使用父组件传来的值啦,值得注意的是,如果是ES6的解构写法,属性名必须一样

const { content } = this.props;

如果是自定义的名字可以这么写

const listContent = this.props.content;

效果都一样,这样一改原来的组件可以改写为

class ShowList extends React.Component {state = {isOpen: false,};triggerDrawer = () => this.setState({ isOpen: !this.state.isOpen });render() {const { isOpen } = this.state;const { content } = this.props;return (<DrawerclassName="drawer-list"maskStyle={{ backgroundColor: 'rgba(240, 242, 245, 0.8)' }}title={<h4>List</h4>}visible={isOpen}width="25%"onClose={this.triggerDrawer}destroyOnClose>{ content }</Drawer>)}
}

如果是多个值的话,一样的写法,在子组件中再去使用就可以

const { content, titile, width } = this.props;

基本就这些啦(。・∀・)ノ゙ 路过顺手点个赞吧~

React中state和props遇到的问题和个人总结相关推荐

  1. React 中使用 render props

    React 中使用 render props 前言 正文 結語 前言 這篇也是紀錄了關於學習 react 的過程,起因是因為開始學習 hooks,但是發現好像有些坑比較重要但卻被我跳過了,像是 ren ...

  2. [react] React中怎么检验props?

    [react] React中怎么检验props? PropTypes 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

  3. [react] 在React中组件的props改变时更新组件的有哪些方法?

    [react] 在React中组件的props改变时更新组件的有哪些方法? 新版用 getDerivedstatefromProps(nextProps){ 业务逻辑} 个人简介 我是歌谣,欢迎和大家 ...

  4. react 中 state 的基本使用

    有状态组件和无状态组件 函数组件又叫做 无状态组件,类组件又叫做 有状态组件 状态( state )即 数据 函数组件没有自己的状态,只负责数据展示(静) 类组件有自己的状态,负责更新Ul,让页面&q ...

  5. 表单组件中state依赖props

    参阅避免派生状态的博文: https://zh-hans.reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html 转 ...

  6. 彻底理解react中的props

    每天对自己多问几个为什么,总是有着想象不到的收获. 一个菜鸟小白的成长之路(copyer) ​在react中 state 和 props是两个非常重要的属性,并且常用的属性.简单来说:都是用来保存数据 ...

  7. React中pros和state的区别

    props是一个父组件传递给子组件的数据流,这个数据流可以一直传递到子孙组件. state代表的是一个组件内部自身的状态(可以是父组件.子孙组件). state 和 props 主要的区别在于 pro ...

  8. React组件的state和props

    React组件的state和props React的数据是自顶向下单向流动的,即从父组件到子组件中,组件的数据存储在props和state中.实际上在任何应用中,数据都是必不可少的,我们需要直接的改变 ...

  9. react中props详解

    1.props的基本使用 react组件之间的传值,是离不开props的 代码展示: export default class Parent extends Component {render() { ...

最新文章

  1. 时隔两周,我给阎王设计的地府CRM终于做完了
  2. 全国计算机一级在线模拟试题,全国计算机一级模拟试题及答案
  3. js中函数的参数为函数的情况即回调函数
  4. win7中PowerShell终端打开时自动进入python virtualenv的虚拟环境以及一键切换python版本
  5. 【转载】输出二进制 C
  6. 昇腾AI计算,无惧618冲动消费
  7. 深度学习(目标检测。图像分割等)图像标注工具汇总
  8. lua和torch的安装
  9. struts2.2跟jstl怎么整合
  10. java pdf替换文字_java 查找替换pdf中的指定文本
  11. 优化神器 beamoff
  12. 彻底理解View事件体系!
  13. RBM算法模型应用在推荐系统 Python代码实现
  14. SH-SSS丨《端到端音视频说话人日志网络》论文线上分享
  15. 目标检测正负样本区分和平衡策略总结
  16. python 利用matplolib给绘制的地图添加方框,将所需的区域圈出来
  17. Solr与MongoDB集成,实时增量索引[转]
  18. 什么是虚拟机?虚拟机有什么用?虚拟机的特点?
  19. 标准的镜头质量评测方法——MTF(Modulation Transfer Function)
  20. 管理3.0 学习词汇笔记 一 树

热门文章

  1. 惠普HP Color Laser 150a 打印机驱动
  2. It doesn't matter 应该怎么翻?
  3. 周昆平:大数据提高银行风险控制能力
  4. FRM 第三章 银行的风险管理流程
  5. Python 基础 之 Pycharm 实现简单的名片管理系统
  6. 迅达电梯调试软件cadi gc3.10
  7. jfif转换jpg,jfif图片格式怎么转换jpg?
  8. EM算法及python简单实现
  9. 基于python的游戏市场分析
  10. 【CodeForces】445B A Lot of Games 字典树博弈