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

本文转载自微信公众号「勾勾的前端世界」,作者西岭。转载本文请联系勾勾的前端世界公众号。

10年积累的成都网站制作、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有新乡县免费网站建设让你可以放心的选择与我们合作。

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

父级组件传递数据

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

 
 
 
  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.         

      接受Props 数据

       
    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.       

      函数接受Props 

       
    8.       {console.log(props.toFun)} 
    9.       {/* 遍历数据 */} 
    10.       {props.toFun.map(item=> 
    11.         ( 
    12.          
    13.           {item.name} 
    14.         
     
  •         ) 
  •       )} 
  •      
  •   ) 
  •  
  • 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.         

      Class 接受Props 数据

       
    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.       

      函数接受Props 

       
    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.        
    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.       

      我是App

       
    10.       {/* 需要传递 JSX ,写在组件双标签内*/} 
    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.         {/* 接收 JSX ,可以接收多个*/} 
    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 

    当前名称:React入门第四步:组件间的值传递Props
    本文地址:http://www.shufengxianlan.com/qtweb/news43/491893.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

    猜你还喜欢下面的内容

    建站公司知识

    行业网站建设