React框架

React框架

React 的起源和发展

React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设Instagram 的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。

React 的出发点

用于开发数据不断变化的大型应用程序(Building large applications with data that changes over time)

与传统MVC的关系

React不是一个完整的MVC框架,最多可以认为是MVC中的V(View),甚至React并不非常认可MVC开发模式;React 构建页面 UI 的库。可以简单地理解为,React 将将界面分成了各个独立的小块,每一个块就是组件,这些组件之间可以组合、嵌套,就成了我们的页面

React Fiber

在react 16之后发布的一种react 核心算法,React Fiber是对核心算法的一次重新实现(官网说法)。之前用的是diff算法。

React Fiber的方法其实很简单——分片。把一个耗时长的任务分成很多小片,每一个小片的运行时间很短,虽然总时间依然很长,但是在每个小片执行完之后,都给其他任务一个执行的机会,这样唯一的线程就不会被独占,其他任务依然有运行的机会。

构建React简易环境

react开发需要引入多个依赖文件:react.js、react-dom.js,分别又有开发版本和生产版本

react.js 帮助我们创建React对象,帮助我们创建组件等功能

react-dom.js 中有ReactDOM对象,渲染组件的虚拟dom为真实dom

在编写react代码的时候需要大量使用jsx代码,需要编译后使用:

  1. 浏览器端编译,通过引入browser、babel等引入的script内的代码做编译
  2. 利用webpack等开发环境进行编译,将编译好的文件引入到应用中

实现一个简单的例子

<!--引入react的核心包-->
<script src="./js/react.development.js"></script>
<!--引入开发web的包-->
<script src="./js/react-dom.development.js"></script>
<!--引入解析jsx的包-->
<script src="./js/babel.js"></script>
<script type="text/babel">
    	ReactDOM.render(<h2>hello world</h2>,
           document.getElementById("box"))
</script>

jsx的原理

jsx 相当于一种语法糖,相当于 js+XML

原理就是通过 React.createElement(tag,{attrs},content)
=> 相当于底层创建了js内存对象(虚拟dom)
=> ReactDOM.render()

jsx 的一些注意事项

  1. jsx ==> js + xml
  2. 有且只能由一个根元素
  3. 因为借鉴了xml的语法规范,标签必须要闭合(特别注意单标签)
  4. class ==> className,由于class是保留字,所以在jsx中要改成className
  5. jsx里面的事件名需要改成驼峰式写法,例如onclick => onClick
  6. jsx 里面的内联样式 style={{backgroundColor:'yellow'}}

let a = 
      <div>
        <p>我是p标签内的文字</p> {/*我是p标签内的文字*/}
        <p>{1+1}</p>            {/*2*/}
        <p>{true}</p>           {/*空*/}
        <p>{false+1}</p>        {/*1*/}
        <p>{[1,2,3,4,5]}</p>    {/*12345*/}
        <p>{undefined}</p>      {/*空*/}
        {/*<p>{{}}</p>*/}       {/*报错*/}
      </div>
    ReactDOM.render(a, document.querySelector('#box'))

Boolean | undefined | null 不会被渲染出来

数组会转成字符串的形式出现

直接渲染对象的话会报错

遍历数组

let arr = ['aa','bb','cc']
let a = 
    <ul>
      {arr.map((item, index) => {
        return <li key={index}>{item}</li>
      })}  
    </ul>
ReactDOM.render(a, document.querySelector('#box'))

key 帮助 React 识别哪些元素改变了,比如被添加或删除。因此你应当给数组中的每一个元素赋予一个确定的标识。

点击切换样式

let arr1 = ['aa', 'bb', 'cc']
  let curIndex = 0
  function showList(arr){
    return arr.map((item,index)=>{
      return (
        <li 
          key={index}
          style={{color:index === curIndex?'red':''}}
          onClick={()=>{
            curIndex = index;
            render()
          }}
        >
          {item}
        </li>
      )
    })
  }
  function render(){
    ReactDOM.render(
      <div>
      { showList(arr1)}
      </div>,
      document.querySelector('#box')
    )
  }
  render()
   

函数式组件

var arr2 = ["aa","bb","cc"]
const List = props => {
  console.log(props)  //获取传递过来的参数
  return (
    <ul>
      {
        props.arr.map((item,index)=>{
          return <li key={index}>{item}</li>
        })
      }
    </ul>
  ) 
}
let obj = {
  arr1:"hello world",
  arr2:100
}
function App(){
  return (
    <div>
      <h2>商品列表</h2>   
      <List {...obj} arr={arr2}></List> 
    </div>
  )
}
ReactDOM.render(<App/>,document.getElementById("box"))

class组件

var goods = ["苹果","香蕉","橘子"]
class List extends React.Component{
  render(){
    // console.log(this.props.arr) //发现this ===> props/state/refs
    let {arr} = this.props
    return (
      <ul>
        {
          arr.map((item,index)=>{
            return <li key={index}>{item}</li>
          })
        }    
      </ul>
    )
  }
}
//定义类组件App
class App extends React.Component{
  render(){ //是react生命周期里面必须要写的一个钩子
    return (
      <div>
        <List arr={goods}/>    
      </div>
    )
  }
}
ReactDOM.render(<App/>,document.getElementById("box"))
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
React框架由以下几个主要组成部分构成[^1]: 1. **组件(Components)**:React的核心思想是将UI拆分为独立的可复用组件。组件是构建React应用的基本单元,可以是函数组件或类组件。组件接收输入的属性(props)并返回描述UI的React元素。 2. **虚拟DOM(Virtual DOM)**:React使用虚拟DOM来提高性能。虚拟DOM是React在内存中维护的一种轻量级的副本,它是对真实DOM的抽象表示。当组件的状态发生变化时,React会比较虚拟DOM与真实DOM的差异,并只更新需要更新的部分,从而减少了对真实DOM的操作次数。 3. **JSX**:JSX是一种JavaScript的扩展语法,它允许我们在JavaScript代码中编写类似HTML的结构。JSX使得编写React组件更加直观和易于理解。 4. **状态管理(State Management)**:React使用状态(state)来管理组件的数据。状态是组件内部的可变数据,当状态发生变化时,React会自动重新渲染组件。通过合理地管理状态,我们可以实现动态的UI交互。 5. **生命周期方法(Lifecycle Methods)**:React组件具有一系列的生命周期方法,这些方法在组件的不同阶段被调用。生命周期方法允许我们在组件的不同阶段执行特定的操作,例如初始化数据、处理副作用、清理资源等。 6. **React Router**:React Router是React的官方路由库,它提供了一种在单页面应用中实现导航和路由的方式。React Router可以帮助我们构建具有多个页面和导航功能的React应用。 以上是React框架的主要构成部分,它们共同协作,使我们能够构建灵活、高效、可复用的交互式UI应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值