首页 > 其他 > 详细

react

时间:2020-08-14 02:22:49      阅读:48      评论:0      收藏:0      [点我收藏+]
1. react 如何实现组件化

  react中有组件化的概念,但是,并不像是vue这样的组件模板文件,react中,一切都是以js来表现的 es6和es7

2. react 核心概念
  1. 虚拟dom:用js对象的形式,来模拟页面上的嵌套关系

  2. diff算法:对比dom和虚拟dom

    (1)tree diff:dom树节点对比

    (2)component diff: 在 tree diff的基础上, 组件级别的对比

    (3)element diff:组件对比的同时,元素级别的对比

    层层递进的关系

3.webpack

  因为webpack是基于node构建的

  和export defult 不同,这里是node里面的语法,common.js语法

module.exports = {}
4.node 和 chrome的关系

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。

5.本地编译和打包编译

本地编译代码时, npm run dev 时,在内存中创建了文件,实质找不到文件,项目中右键检查源代码时,srcipt标签引入的是 src="app.js",并且app.js文件里并没有被压缩,假设本地运行的端口是8080,那么在localhost:8080/app.js下会看到你在内存中编译的js代码

但是生产环境引入了多个压缩的js文件

6.react脚手架

    查看脚手架版本 create-react-app --version

  1. 创建项目 npm init react-app my-app 或者 create-react-app myapp

  2. 解决找不到命令报错:https://blog.csdn.net/weixin_36775115/article/details/103599176

 

react创建dom元素

 

 1 // 1. 创建dom元素 createElement(
 2 // 参数1:创建的元素的类型,字符串,表示元素的名称
 3 // 参数2: 是一个对象或是null,表示dom元素的属性,
 4 // 参数3,子节点(包括其他虚拟dom,获取  文本子节点)
 5 // 参数n: 其他子节点
 6 // )
 7 // const myh2 = React.createElement(‘h2‘, null, ‘这是创建的子节点‘);
 8 
 9 //当设置属性class类名时,应写成className
10 const myh2 = React.createElement(h2, { className: myh2, title: this is dom}, 这是创建的子节点);
11 const mydiv = React.createElement(‘div‘, null, ‘给h1外面套一层div‘, myh2)     // 给h2外面套一层div
12 //ReactDOM.render() 将虚拟dom渲染到页面
13 // 1. 要渲染的虚拟dom元素
14 // 2. 指定的容器
15 ReactDOM.render(mydiv, document.getElementById(app))

 

jsx语法        https://reactjs.bootcss.com/docs/introducing-jsx.html

在js中混合写入html语法,叫做jsx,符合xml规范的js,jsx语法的本质在运行的时候被babel转换成 React.createElement()的形式

技术分享图片

和Vue的插值表达式一样,循环的时候也要加key,由于虚拟dom的原因,防止dom元素被复用 

创建元素时单行可以不用加(),多行必须要加()

1 let name = 小明
2 let a = 10
3 let boo = true
4 let title = myh1
5 const h1 = <h1>这里是h1</h1>
6 const myh1 = <div class={title}>{a + 2} {name} {boo ?  : } {h1}</div>
7 
8 ReactDOM.render(myh1, document.getElementById("app"))

jsx语法里写注释  /* */形式

 1 {/* {a + 2} {name} {boo ? ‘真‘ : ‘假‘} {h1} */} 

jsx语法中给元素添加类名,使用className代替

react 创建组件

 

组件名称必须以大写字母开头

 

React 会将以小写字母开头的组件视为原生 DOM 标签。例如,<div /> 代表 HTML 的 div 标签,而 <Welcome /> 则代表一个组件,并且需在作用域内使用 Welcome

 

  第一种,构造函数创建组件,必须有return,否则报错,和vue一样,必须要有一个根元素,构造函数名即为组件名

1 function Hello() {
2   return <div>这里是组件</div>
3 }
4 
5 ReactDOM.render(<div>
6   我要创建组件
7   <Hello></Hello>
8 </div>,
9   document.getElementById("app"))

react工具

https://github.com/facebook/react-devtools

https://github.com/facebook/react

react组件传值

不管是vue,还是react,组件中props接受的参数永远都是只读的

 1 //定义子组件
 2 function Hello(props) {
 3   // console.log(props)    //形参接受外界传过来的参数,和vue一样,props接受的参数是只读的,不可修改
 4   let { userinfo, user } = props
 5   return <div>这里是组件 {userinfo.name}</div>
 6 }
 7 
 8 const userobj = {
 9   name: shun,
10   age: 18
11 }
12 const userarr = [{ id: 0, gril: ppp }, { id: 1, gril: uuu }]
13 
14 ReactDOM.render(<div>
15   我要创建组件
16   {/* 传递参数 */}
17   <Hello userinfo={userobj} user={userarr}></Hello>   
18 </div>,
19   document.getElementById("app"))

 react 抽离组件    后缀名 .jsx,页面直接引入用就好了

 1 import React from react;
 2 
 3 
 4 export default class Hello extends React.Component {
 5   constructor(props) {
 6     super(props)
 7     console.log(props)
 8     this.userobj = props.userobj
 9   }
10   render() {
11     return (
12       <div>
13         姓名{this.userobj.name}
14       </div>
15     );
16   }
17 }

 

react

原文:https://www.cnblogs.com/shun1015/p/13489861.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!