• React(2)


    一、Web项目的架构类型

    1. 1991年之后:纯静态页面阶段 —— 内容永远不变
    2. 1994年左右:动态网页阶段/前后端代码混杂一起 —— 不同人不同时间访问其内容可能改变,ASPX/PHP/JSP,不足:代码的可读性可维护性差
    3. 1998年左右:AJAX阶段/前后端不分离 —— 静态内容和动态内容分处于不同的页面中(仍然运行于同一个服务器中),静态内容加载完成再使用XHR等技术异步请求动态内容
    4. 2010年左右:前后端分离阶段 —— 静态内容和动态内容分处于不同的服务器中,优势:便于独立的开发/调试/维护,性能优异;不足:天然伴随着“跨域问题”

    二、项目:净美仕企业门户

    项目背景:2013年,净美仕的企业门户,基本功能参见 www.codeboy.com:9999/mfresh/
    早期技术选型:采用的“前后端不分离”的技术方案 —— 静态文件(.html)和动态文件(.php)共处于同一个Web服务器中,目前看来已经略显过时了,性能不足,PHP已经处于消亡的边缘。
    项目重构:采用的“前后端分离”的技术架构 —— 静态文件(.html)运行于的Apache或Nginx服务器,后端接口(.php或.node或.java)用对应的后端服务器。技术选型:
    后台接口:暂时先用之前的.php接口,后期改写为.node+express编写RESTful API
    前端界面React + React-Router-Dom + fetch + 自定义组件库

    ======================

    面试题:React项目中放置图片的目录有两个,二者的区别是什么?:

    public:静态资源托管目录,不会被Webpack打包处理,而是直接发布到服务器中,客户端浏览器可以直接使用文件路径来访问 —— 用于放置项目中的动态图片,例如:用户头像、商品评论图片…
    src:源代码目录,里面的文件只有被Webpack打包后(必须被其它模块依赖)才能发布到服务器中,否则外界无法访问 —— 用于放置项目中的静态图片,例如:logo、各种小图标…

    三、React中的路由导航模块

    Vue.js中的路由导航模块:Vue-Router
    小程序中的路由导航: pages.json + 五种跳转API
    uni-app中的路由导航: pages.json + 五种跳转API
    React中的路由导航模块
    基于浏览器的项目(网站/H5等): react-router-dom
    脱离浏览器的项目(ReactNative): react-navigation

    React中基于浏览器的项目,实现SPA应用必需的路由导航模块:react-router-dom
    官网手册: https://reactrouter.com/en/main/start/tutorial
    使用方法:

    1. 下载必需的第三方模块文件
      npm i react-router-dom
      提示:下载得到的最新版是V6.4,与上一周的内容不一样
    2. 修改index.js,使用Router代替App组件
      import {RouterProvider, createBrowserRouter } from  'react-router-dom'			
      
      let r = createBrowserRouter([
      	{path: '/login',  element: <Login/> },
      	{path: '/regiseter', element: <Register/>},
      	.......
      	{path: '/*", element: }
      ])
      let root = ReactDOM.createRoot(document.getElementById('root'))
      root.render(  )
      
    3. 实现页面跳转的两种方式:
      模板法:
      脚本法:useNavigate( )
    4. 如何获取当前页面的路由地址:
      let loc = useLocation( )     
       //{ pathname: 路由地址,  search: 查询字符串 }
      
    5. 如何读取路由参数(即路由地址中的查询字符串数据)
      let x = useSearchParams( )
      

    四、React中的接口异步请求

    React官方没有提供异步数据请求方案;可以使用现有的已知的任何技术;官方示例使用的是fetch。
    fetch:抓取,用于客户端浏览器抓取服务器端接口数据;是W3C委员会为HTML5新增的异步请求技术,目的在于“取代XHR”。
    使用手册: https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch

    使用fetch发起GET请求—Promise

    let url = 'http://www.codeboy.com:9999/news?nid=2'     
    //异步请求服务器端接口数据,返回一个Promise
    let promise1 = fetch( url )   
    promise1.then(res=>{      //res: response,响应消息对象
        //clg(res.status)  响应状态码
        //clg(res.headers)   响应消息头部
        //clg(res.body)   响应消息主体(ReadableStream)
        //如果开发者确认服务器返回的主体是JSON字符串的话,使用JSON.parse()方法对主体进行解析即可
        let promise2 = res.json( ) //读取响应消息主体,完成后进行JSON解析
        promise2.then(data=>clg(data)).catch(err=>clg(err))
    }).catch(err=>clg(err))
    

    使用fetch发起GET请求—await(推荐使用)

    let url = 'http://www.codeboy.com:9999/news?nid=2'     
    //异步请求服务器端接口数据,返回一个Promise
    let  res  = await  fetch( url )   
    let  data = await  res.json( ) //读取响应消息主体,完成后进行JSON解析
    clg(data)
    

    使用fetch发起POST请求—await(推荐使用)

    let url = 'http://www.codeboy.com:9999/login'
    let options = {
       method: 'POST',
       headers: {'Content-Type': 'application/x-www-form-urlencoded'},
       body: 'uname=yaya&upwd=123'
    } 
    //异步请求服务器端接口数据,返回一个Promise
    let  res  = await  fetch( url, options )   
    let  data = await  res.json( ) //读取响应消息主体,完成后进行JSON解析
    clg(data)
    

    七、React中的“父子组件间传参”

    父组件的数据传递给子组件 —— Props Down

    //父组件(Parent.js)
    function Parent(){
       let [newsList] = useState([....])
       return <Child  list={newsList} />
    }
    -----------
    //子组件(Child.js)
    function Child( props ){
       clg( props.list ) //值就是父组件中的newsList
    }
    

    子组件的数据传递给父组件 —— Props Up

    //父组件(Parent.js)
    function Parent(){
      function showPage( n ){   //clg(n)   }
      return  <Child  f2={showPage}/>
    }
    -----------
    //子组件(Child.js)
    function Child( props ){
       let  num = 3   //要传递给父组件的数据
       props.f2( num )  //在子组件体内调用父组件的方法,实参是子组件的数据
    }
    

    八、内容绑定中“innerText”和“innerHTML”

    Vue.js小程序/uni-appReact
    innerText绑定
    {{表达式}}
    {表达式}
    innerHTML绑定
    //React提供的“友好提示”:innerHTML绑定的内容一定要安全

    **拓展

    AJAX实现的具体技术有哪些?
    1. XHR —— 浏览器兼容性好;麻烦,基于回调
    2. jQuery.ajax( ) —— 底层就是XHR;基于回调
    3. axios —— 第三方工具,底层就是XHR;基于Promise
    4. wx.request( )/uni.request( ) —— 用于专有平台
    5. fetch —— H5标准技术,用于取代XHR;功能强大,且基于Promise
    React小知识:在JSX里如何创建一个不生成任何HTML元素的父元素?

    Vue.js中:
    方法①
    方法②

    React中:
    方法① <>
    方法② 片段

    JSX小知识:如何在JSX中添加注释?
    { /*  JSX注释  */ }
    { 
      // JSX注释  
    }
    
  • 相关阅读:
    facebook怎么加好友
    【wsl】window自带linux配置
    清华超算平台使用【指北】
    redis 通信协议(RESP),最简单的应用层协议,没有之一
    2024华为OD机试真题-机场航班调度-C++(C卷D卷)
    linux如何重置root密码
    森林消防隔膜泵的应用与前景——恒峰智慧科技
    win10无hyper-v设置
    MybatisPlus
    【教程】Pycharm社区版中打开jupyter的方法
  • 原文地址:https://blog.csdn.net/m0_70328115/article/details/127098723