React 笔记 父子组件传值

React父子组件传值

  • react中的组件:解决HTML标签构建应用的不足。
  • 使用组件开发的好处:把公共的功能单独抽离成一个文件作为一个组件,哪里使用哪里引入。
  • 父子组件:组件的相互调用中,我们把调用者称为父组件,被调用者称为子组件;
  • 父子组件传值(react父子组件通信)
    • 父组件给子组件传值
      1. 在调用子组件的时候定义一个属性
      2. 子组件里面 this.props.msg

      说明:父组件可以给子组件传值,还可以给子组件传方法,以及把整个父组件传给子组件。还可以子组件给父组件传值

    • 父组件主动获取子组件的数据
      1. 调用子组件的时候指定ref的值
      2. 通过this.refs.header 获取整个子组件实例 (DOM(组件)加载完成以后获取)
    • 父组件给子组件传值
      • defaultProps:父组件传值中,如果父组件调用子组件的时候不给子组件传值,则可以在子组件中使用defaultProps定义的默认值
      • propType:验证父组件传值的类型合法性
        • 引入import PropTypes from ‘prop-type’;
        • 类.PropTypes={name:PropTypes.string}

          通过propTypes定义父组件传给子组件的类型

      • 都是定义在子组件里边的
react中没有提供专门请求数据的模块。但是我们可以使用任何第三方请求数据模块实现请求数据
  • axios https://github.com/axios/axios axios作者觉得jsonp不太友好,推荐使用CORS方式更为干净(后端运行跨域)
    • 安装axios模块 npm insttall axios --save
    • 在哪里使用就在那里引用 import axios from ‘axios’
    • 看文档使用
         //接口后台允许了跨域否则获取不到数据
         let api = 'http://xxx?a=getList&id=20'
         axios.get(api).then(function(response){
           console.log(response)
         }).catch((error)=>{
           console.log(error)
        })
      
  • fetch-jsonp https://github.com/camsong/fetch-jsonp
    • 安装 npm install fet-jsonp --save
    • import FetchJsonp from ‘fetch-jsonp’
    • 看文档使用
      let api = http://xxx?a=getList&id=20&callback=?
       FetchJsonp(api)
         .then(function(response) {
           return response.json() 
         }).then(function(json) {
           console.log('parsed json', json) 
         }).catch(function(ex) {
           console.log('parsing failed', ex)
         })
      
  • 其他请求数据的方法也可以 自己封装模块用原生js实现数据请求也可以
远程测试APP接口
  • get请求
    • http://xxx?a=getList&id=20
  • jsonp请求地址的时候
    • http://xxx?a=getList&id=20&callback=?

React生命周期函数

组件加载之前,组件加载完成,以及组件更新数据,组件销毁。触发一系列的方法,这就是组件的生命周期函数

  • 组件加载的时候触发的函数:
    • constructor componentWillMount render componentDidMount(加载完成)
  • 组件更新时触发的函数:
    • shouldComponentUpdate(是否要更新数据,如果返回false则不执行更新) componentWillUpdate(组件将要更新时触发) render componentDidUpdate(组件数据更新完成)
  • 你在父组件里面改变props传值的时候触发的:
    • componentWillReceiveProps
  • 组件销毁的时候触发的函数:
    • componentWillUnmount (组件销毁的时候触发的生命周期函数)

react-Router

  • react-Router 可以让根组件动态的去挂载不用的其他组件。根据用户访问的地址动态的加载不同的组件
  • react路由的配置
    • 找到官方文档 https://reacttraining.com/react-router/web/example/basic
    • 安装 cnpm install react-router-dom --save
    • 找到项目的根组件引入 react-router-dom
      • import {BrowserRouter as Router,Switch,Route,Link} from “react-router-dom”;
    • 复制官网文档根组件里面的内容进行修改
      • exact表示严格匹配
         <Router>
               <div>
                 <ul>
                   <li>
                     <Link to="/">Home</Link>
                   </li>
                   <li>
                     <Link to="/about">About</Link>
                   </li>
                   <li>
                     <Link to="/dashboard">Dashboard</Link>
                   </li>
                 </ul>
         
                 <hr />
                 <Switch>
                   <Route exact path="/">
                     <Home />
                   </Route>
                   <Route path="/about">
                     <About />
                   </Route>
                   <Route path="/dashboard">
                     <Dashboard />
                   </Route>
                 </Switch>
               </div>
             </Router>
      
动态路由及get传值
  • 一个页面切换到另外一个页面进行传值
    • get传值
      • 获取get传值 this.props.location.search // 得到?aid=4
        • 解析?aid=4

          使用url模块解析url地址 在react里面使用URL模块需要安装url模块 cnpm install url --save

          • 使用url.parse(this.props.location.search,true)
          • aid=url.parse(this.props.location.search,true).query.aid
    • 动态路由
      • 获取动态路由的传值 this.props.match.params.aid
    • localStorage
  • 总结动态路由及get传值
    • 动态路由传值
      1. 动态路由配置
        (1)
      2. 对应的动态路由加载的组件里面获取传值
        (1) this.props.match.params
    • react get传值
      • this.props.location.search
react 解析html

react通过js实现路由跳转

  • 要引入Redirect
  • 定义一个flag
  • render里边判断flag,来决定是否跳转
  • 执行js跳转
    • 通过js改变flag状态
    • 之后就可以通过Redirect进行跳转
      • <Redirect to={ {pathname:“/”}} />

相关推荐

  1. React 笔记 父子组件

    2023-12-09 01:16:02       41 阅读
  2. react+ts父子组件

    2023-12-09 01:16:02       39 阅读
  3. vue中父子组件

    2023-12-09 01:16:02       37 阅读
  4. vue父子组件问题

    2023-12-09 01:16:02       24 阅读
  5. vue3父子组件

    2023-12-09 01:16:02       32 阅读
  6. Vue封装组件 父子组件相互

    2023-12-09 01:16:02       36 阅读
  7. 父子组件,子组件反显问题

    2023-12-09 01:16:02       15 阅读
  8. vue3+vite+ts父子组件之间的

    2023-12-09 01:16:02       46 阅读
  9. vue 父子组件之间通过 v-model

    2023-12-09 01:16:02       44 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-09 01:16:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-09 01:16:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-09 01:16:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-09 01:16:02       20 阅读

热门阅读

  1. 圣诞树网页效果代码详解

    2023-12-09 01:16:02       37 阅读
  2. scss:修改element组件样式(el-select)

    2023-12-09 01:16:02       38 阅读
  3. MySQL-DATE_FORMAT()函数

    2023-12-09 01:16:02       40 阅读
  4. uniapp下拉刷新

    2023-12-09 01:16:02       48 阅读
  5. 数据仪表盘设计:可视化数据指标和报告

    2023-12-09 01:16:02       38 阅读
  6. Golang中json和jsoniter的区别

    2023-12-09 01:16:02       39 阅读
  7. 【Https】HTTPS协议 的介绍及作用

    2023-12-09 01:16:02       31 阅读
  8. Sass 的一小部分功能和语法

    2023-12-09 01:16:02       42 阅读
  9. 开发重要网站

    2023-12-09 01:16:02       27 阅读
  10. TCP通讯

    TCP通讯

    2023-12-09 01:16:02      37 阅读
  11. 47. 全排列 II

    2023-12-09 01:16:02       40 阅读
  12. TCP/IP五层(或四层)模型,IP和TCP到底在哪层?

    2023-12-09 01:16:02       31 阅读
  13. 上拉、下拉电阻的作用

    2023-12-09 01:16:02       33 阅读