React --- 梦开始的地方

Posted So istes immer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React --- 梦开始的地方相关的知识,希望对你有一定的参考价值。

目录

1.简介

React是一个用于构建用户界面的javascript
或者更准确地说,是一个将数据渲染成html视图的JavaScript 库
Facebook开源

原生js的缺陷:直接操作DOM,浏览器会进行大量的重绘重排,效率低下,而且没有组件化编码方案,代码复用率低

React特点:
①采用组件化模式,声明式编码,提高开发效率和组件复用率
②在React Native中可以使用React语法进行移动端开发
③使用虚拟DOM+优秀的Diffing算法,尽量减少与真实DOM的交互
(数据先渲染成虚拟DOM,然后虚拟DOM再映射成为页面中的真实DOM,当数据增加时,会先在原有DOM上比较,如果没有才会增加新DOM,而不会把原来所有的数据再渲染一遍)

2.起步

目录

下载并引入下面几个js文件:
react.development.js: react的核心文件
babel.min.js: 将ES6转换为ES5,将jsx转换为js
react-dom.development.js: react的扩展库,用来操作DOM的
下载这几个文件,可以去官网的示例中找到这几个文件的url,顺着这个url,右击鼠标另存为即可
https://unpkg.com/react@17/umd/react.development.js
https://unpkg.com/react-dom@17.0.2/umd/react-dom.development.js
https://unpkg.com/@babel/standalone/babel.min.js

babel.min.js要在react-dom.development.js之前引入,因为后者依赖于前者

创建虚拟DOM的时候你也可以用原生js写,但是不如jsx方便 

如果你想换行,可以这样写

const VDOM = (
   <div>
     <h1><span>Hello</span></h1>
   </div>
)
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8"></meta>
    <title>hello_react</title>
  </head>
  <body>
    <!-- 准备好一个容器 -->
    <div id="test"></div>
    <!-- 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom, 用于支持react操作DOM -->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!-- 引入babel,用于将jsx转为js -->
    <script type="text/javascript" src="../js/babel.min.js"></script>

    <script type="text/babel">
      // 1.创建虚拟DOM
      const VDOM = <h1>Hello, React</h1>
      // 2.渲染虚拟DOM到页面
      ReactDOM.render(VDOM, document.getElementById('test'))
    </script>
  </body>
</html>

3.关于虚拟DOM 

①本质是object类型的对象(可以自己console.log打印出来看看)
②虚拟DOM比较"轻",真实DOM比较"重" ,因为虚拟DOM是React内部在用,无需真实DOM那么多属性
③虚拟DOM最终会被React转换为真实DOM,呈现在页面上

4.JSX

JSX(JavaScript XML),react定义的一种类似于XML的JS扩展语法: JS + XML
本质是  React.createElement(components, props, ...children)方法的语法糖

语法规则

 ①定义虚拟DOM的时候不要加引号
 ②标签中混入js表达式(不是js语句)时要用
 ③样式的类名用className,不用class
 ④内联样式,用style=key:value的形式去写
 ⑤只有一个根标签,也就是说最外面只能有一个标签包着

const data = 'Hello React'
const VDOM = (
   <div>
     <h2 className="title">
        <span style=color:'white'>data</span>
     </h2>
     <input type="text"/>
   </div>
)

小练习

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8"></meta>
    <title>hello_react</title>
  </head>
  <body>
    <div id="test"></div>
    <script type="text/javascript" src="../js/react.development.js"></script>
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <script type="text/javascript" src="../js/babel.min.js"></script>

    <script type="text/babel">
      const data = ['React', 'Vue', 'Angular']
      const VDOM = (
        <div>
          <h1>前端js框架列表</h1>
          <ul>
            
              data.map((item, index)=>
                return <li key=index>item</li>
              )
            
          </ul>
        </div>
      )
      ReactDOM.render(VDOM, document.getElementById('test'))
    </script>
  </body>
</html>

 ps: 在data.map()中有的时候不推荐用index作为key值,这个后面细讲

5.模块化和组件化 

js模块化:将一个大的js文件按照特定功能拆成一个一个小的js文件,目的是提高js的复用率

而组件化,就拆的不仅仅是js了,它将一个页面拆成一个个组件,每个组件不仅包含js,还包含html,css,img等等

6.安装开发者工具 React Developer Tools

React Developer Tools-Chrome插件下载-收藏猫插件

7.函数式组件和类式组件

函数式组件

// 其它代码同上
<script type="text/babel">
  function MyComponent() 
     console.log(this);  // 此处的this是undefined,因为babel编译后开启了strict模式
     return <h2>我是函数定义的组件</h2>
  
  ReactDOM.render(<MyComponent/>, document.getElementById('test'))
</script>

 执行ReactDOM.render(),React会解析组件标签,发现它是函数定义的,就调用该函数,将返回的虚拟DOM转为真实DOM,随后呈现在页面上。

类式组件

类中定义的方法都放在了类的原型对象

原型对象和原型链

// 其它代码同上
<script type="text/babel">
  class MyComponent extends React.Component 
    render() 
      return <h2>我是类定义的组件</h2>
    
  
  ReactDOM.render(<MyComponent/>, document.getElementById('test'))
</script>

8.引入favicon.ico

 favicon.ico图片扔在项目根目录即可

<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">

对于chrome浏览器,目录正确,但是显示不出来的情况,是缓存的问题。
建议清除缓存后 ,按ctrl+f5键强制刷新。 

9.在vscode内部打开浏览器 

安装这个插件:Preview on Web Server

用的时候鼠标右击选就完了,既可以在vscode内部打开浏览器,又可以跳出来打开浏览器 

以上是关于React --- 梦开始的地方的主要内容,如果未能解决你的问题,请参考以下文章

梦开始的地方,从最小二乘法开始学机器学习

梦开始的地方,从最小二乘法开始学机器学习

梦开始的地方——C语言柔性数组

LeetCode哈希表#4梦开始的地方:两数之和(map),以及关于容器map的一些代码技巧

梦开始的地方 —— C语言: 函数指针+函数指针数组+指向函数指针数组的指针

梦开始的地方