文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

React 入门第四步:组件间的值传递 Props

2024-12-14 01:26

关注

父组件向子组件传值 -普通传值

父级组件传递数据

默认情况由父级组件传递数据到子级组件,我们将需要传递的数据,以属性的方式,写入组件中,如下:

  1. import React from'react' 
  2. // 引入单文件组件 
  3. import PropsClass from'./PropsClass' 
  4. import PropsFun from'./PropsFun' 
  5.  
  6. // 要传递的数据 
  7. const toData = [ 
  8.   {id:1,name:"刘能",age:66}, 
  9.   {id:2,name:"广坤",age:16} 
  10.  
  11. functionApp() { 
  12.   return ( 
  13.     
     
  14.       {} 
  15.        
  16.        
  17.     
 
  •   ) 
  •  
  • exportdefault App 
  • 这样就完成了父级组件向子级组件传递数据的任务。

    那么组件又分为函数组件和类组件。下面,我们分别展示类组件和函数组件是如何获取传递进来的数据的。

    我们先看类组件的获取方式。

    class 子级组件接受数据

    class 组件中使用 this.props.xx 属性名获取父级组件传递的数据:

    1. import React, { Component, Fragment } from'react' 
    2.  
    3. exportclass PropsClass extends Component { 
    4.   render() { 
    5.     return ( 
    6.        
    7.          
    8.         {console.log(this.props.toClass)}{} 
    9.         {} 
    10.         {this.props.toClass.map(item => 
    11.         ( 
    12.            
    13.             {item.name}{item.age} 
    14.           
     
  •         ) 
  •         )} 
  •        
  •     ) 
  •   } 
  •  
  • exportdefault PropsClass 
  • 类组件中 this 操作相对容易,因此,React 默认会将父级组件的传入的数据放入 props 属性中。而在类组件中,如代码所示,我们就可以直接使用 this.props 来获取数据了。

    函数子级组件接受数据

    函数组件中,Props 数据会默认传入函数,因此需要在函数形参中获取,直接使用即可。

    1. import React, { Fragment } from'react' 
    2.  
    3. // 函数形参获取Props 传值 
    4. functionPropsFun(props) { 
    5.   return ( 
    6.      
    7.        
    8.       {console.log(props.toFun)} 
    9.       {} 
    10.       {props.toFun.map(item=> 
    11.         ( 
    12.          
    13.           {item.name} 
    14.          
    15.         ) 
    16.       )} 
    17.      
    18.   ) 
    19.  
    20. exportdefault PropsFun 

    前面我们学习了父级组件向不同的子级组件传递数据,以及子级组件如何接受数据并处理,而如果父级组件传递较为复杂的数据时,如何传递数据,如何在子组件中使用,就需要我们进一步学习了解。

    父组件向子组件传值 -解构传值

    父级组件传递数据

    传递普通数据,前面我们已经接触过了,如果要是传递的数据是数组或者对象,我们应该如何处理呢?

    最直接的办法就是在传递时,在父级组件中将数据先进行解构,因为解构出来的数据,正好就是符合组件 “属性” 写法的:

    1. import React from'react' 
    2. // 引入单文件组件 
    3. import PropsClass from'./PropsClass' 
    4. import PropsFun from'./PropsFun' 
    5.  
    6. // 要传递的数据 
    7. const toData = [ 
    8.   {id:1,name:"刘能",age:66}, 
    9.   {id:2,name:"广坤",age:16} 
    10.  
    11. functionApp() { 
    12.   return ( 
    13.     
       
    14.       {} 
    15.        
    16.        
    17.      
    18.   ) 
    19.  
    20. exportdefault App 

    上面是解构传参。而在子级组件中应用时,与普通的应用并没有区别,按照解构好的对应格式进行接收就可以了。

    下面我们分别展示类组件和函数组件中获取解构传参的方式。

    class 子级组件接受数据

    依然使用 props 获取传参。

    1. import React, { Component, Fragment } from'react' 
    2.  
    3. exportclass PropsClass extends Component { 
    4.  
    5.   render() { 
    6.     // 获取传入的解构数据 
    7.     const {name,age} =this.props 
    8.     return ( 
    9.        
    10.          
    11.         {console.log(name,age,'--')}{} 
    12.  
    13.        
    14.     ) 
    15.   } 
    16.  
    17. exportdefault PropsClass 

    函数子级组件接受数据

    依然使用函数形参获取数据。

    1. import React, { Fragment } from'react' 
    2.  
    3. // 函数形参获取Props 传值 (结构) 
    4. functionPropsFun({ name, age }) { 
    5.   return ( 
    6.      
    7.        
    8.       fun 数据: 
    9.       {console.log(age, name)} 
    10.       
       
    11.         {name} 
    12.         {age} 
    13.        
    14.      
    15.   ) 
    16.  
    17. exportdefault PropsFun 

    设置默认值

    在一定的条件下,父级组件即便没有传入数据,子组件依然需要展示相关内容。那么此时,我们就可以在子组件中设置默认值来填充,当父级组件没有传入数据时,子组件使用默认数据,而如果父级组件有数据传入,则替换默认值。

    父级组件可以传入数据,也可以不传入:

    1. import React from'react' 
    2. // 引入单文件组件 
    3. import PropsClass from'./PropsClass' 
    4. import PropsFun from'./PropsFun' 
    5.  
    6. functionApp() { 
    7.   return ( 
    8.     
       
    9.       {} 
    10.       "llll"/> 
    11.        
    12.      
    13.   ) 
    14.  
    15. exportdefault App 

    类组件设置默认值

    class 子组件中使用 static defaultProps 设置默认值,当然,我们依然需要从 this.props 中获取。

    1. import React, { Component, Fragment } from'react' 
    2.  
    3. exportclass PropsClass extends Component { 
    4.  
    5.   // 此时我们就设置了 props 的默认值, 
    6.   // 如果父组件没有传递数据,则默认使用 
    7.   // 如果传递了数据,则替换默认值 
    8.   static defaultProps = { 
    9.     names:'西岭老湿'
    10.     age:18 
    11.   } 
    12.  
    13.  
    14.   render() { 
    15.     // 获取组件传入的数据,可能是默认值,也可能是传入的数据 
    16.     const {names,age} =this.props 
    17.     return ( 
    18.        
    19.         

      Class 组件

       
    20.         

      {names}

       
    21.         

      {age}

       
    22.        
    23.     ) 
    24.   } 
    25.  
    26. exportdefault PropsClass 

    函数组件设置默认值

    函数组件需要使用组件名 .defaultProps 设置一个对象作为默认值,依然使用形参获取:

    1. import React, { Fragment } from'react' 
    2.  
    3. // 函数形参获取Props 传值 (结构) 
    4. functionPropsFun({ name, age }) { 
    5.   return ( 
    6.    
       
    7.      

      函数组件

       
    8.      

      {name}

       
    9.      

      {age}

       
    10.     
    11.   ) 
    12.  
    13. // 函数组件需要使用组件名.defaultProps设置一个对象 
    14. PropsFun.defaultProps= { 
    15.   name:'西岭'
    16.   age:16 
    17.  
    18. exportdefault PropsFun 

    如果不想在子组件的形参接收时解构,也可以直接获取 props。

    1. import React, { Fragment } from'react' 
    2.  
    3. // 函数形参获取Props 传值 (结构) 
    4. functionPropsFun(props) { 
    5.   return ( 
    6.    
       
    7.      

      函数组件

       
    8.      

      {props.name}

       
    9.      

      {props.age}

       
    10.     
    11.   ) 
    12.  
    13. // 函数组件需要使用组件名.defaultProps设置一个对象 
    14. PropsFun.defaultProps= { 
    15.   name:'西岭'
    16.   age:16 
    17.  
    18. exportdefault PropsFun 

    向子组件传递 JSX

    父级组件传递 JSX

    在父级组件中,需要向子级组件传递 JSX ,需要将 jsx 写在组件的双标签内。

    1. import React from'react' 
    2. // 引入单文件组件 
    3. import PropsClass from'./PropsClass' 
    4. import PropsFun from'./PropsFun' 
    5.  
    6. functionApp() { 
    7.   return ( 
    8.     
       
    9.        
    10.       {} 
    11.        
    12.         {} 
    13.         

      父级组件中传入的JSX, p标签,App-Class组件

       
    14.         父级组件中传入的JSX,span标签,App-Class组件 
    15.        
    16.        
    17.      
    18.   ) 
    19.  
    20. exportdefault App 

    class 子组件接收 JSX

    使用 this.props.children 可以接收父级组件中传入的全部 JSX。

    1. import React, { Component, Fragment } from'react' 
    2. exportclass PropsClass extends Component { 
    3.   render() { 
    4.  
    5.     return ( 
    6.        
    7.         

      Class 组件

       
    8.         {} 
    9.         {this.props.children} 
    10.        
    11.     ) 
    12.   } 
    13.  
    14. exportdefault PropsClass 

    函数子组件接收 JSX

    函数组件中获取 jsx ,可以直接使用 props 接收参数。

    1. import React, { Fragment } from'react' 
    2.  
    3. // 函数组件中获取jsx ,可以直接使用 props 接收参数 
    4. functionPropsFun(props) { 
    5.   return ( 
    6.    
       
    7.      

      函数组件

       
    8.      

      {props.name}

       
    9.      

      {props.age}

       
    10.      {props.children} 
    11.     
    12.   ) 
    13.  
    14. // 函数组件需要使用组件名.defaultProps设置一个对象 
    15. PropsFun.defaultProps= { 
    16.   name:'西岭'
    17.   age:16 
    18.  
    19. exportdefault PropsFun 

     

    来源:勾勾的前端世界内容投诉

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    软考中级精品资料免费领

    • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

      难度     813人已做
      查看
    • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

      难度     354人已做
      查看
    • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

      难度     318人已做
      查看
    • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

      难度     435人已做
      查看
    • 2024年上半年系统架构设计师考试综合知识真题

      难度     224人已做
      查看

    相关文章

    发现更多好内容

    猜你喜欢

    AI推送时光机
    位置:首页-资讯-后端开发
    咦!没有更多了?去看看其它编程学习网 内容吧
    首页课程
    资料下载
    问答资讯