MVC和react

MVC

1.MVC是一种使用MVC(Model View Controller 模型-视图-控制器)设计创建Web应用程序的模式.

(1)Model(模型)表示应用程序核心(比如数据库记录列表).

(2)View(视图)显示数据(数据库记录).

(3)Controller(控制器)处理输入(写入数据库记录).

2.MVC模式同时提供了对HTML、CSS和JavaScript的完全控制.

(1)Model(模式)是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据.

(2)View(视图)是应用程序中出处理数据显示的部分,通常视图是依据模型数据创建的.

(3)Controller(控制器)是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据.

react介绍

1.介绍

(1)react是一个用于创建可复用、可聚合的web组件库.

(2)react提供的只是mvc里面的c部门,不是全部的mvc框架.

2.特点

(1)组件化:不是一大堆html代码模板.

(2)js逻辑与html标签紧密连接.

(3)单向数据传输.

(4)虚拟的DOM结构.

3.优点

(1)组件更加清晰直观.

(2)组件关系更加清晰.

(3)结果可以预测.

4.react重要文件内容及作用

重点的三个库:

(1)react.js是React的核心库.

(2)react-dom.js是提供与DOM相关的功能.

(3)Browser.js的作用是将JSX语法转化为JavaScript语法,这一步很消耗时间,实际上线的时候,应该将它放到服务器完成

jsx语法

1.jsx是一个看起来很像XML的JavaScript语法扩展,React可以用来做简单的JSX句法转换.

2.为什么要使用JSX?

(1)你不需要为了React使用JSX,可以直接使用纯粹的JS,但我们更建议使用JSX,因为它能定义简洁且我们熟知的包含属性的树状结构语句.

(2)对于非专职开发者(比如设计师)同样比较熟悉.

(3)XML有固定的标签开启和闭合,这能让复杂的树更易于阅读,由于方法调用和对象字面量的形式.

(4)它没有修改JavaScript语义.

3.JSX的语法,它允许HTML与JavaScript的混写.

4.jsx遇到HTML标签(以 < 开头),就用HTML规则解析,遇到代码块(以 { 开头),就用JavaScript规则解析.

5.ReactDOM.render():是React的最基本方法,用于将模板转为HTML语言,并插入指定的DOM节点.

6.JavaScript表达式的使用:

(1)可以在JSX 中使用JavaScript表达式,表达式写在花括号 { } 中.

ReactDOM.render(
    <div><h1>{1+1}</h1></div>
    document.getElementById('example'));

(2)在JSX中不能使用if else 语句,但可以使用conditional(三元运算)表达式来替代:

ReactDOM.render(
    <div><h1>{i==1?'True':'False'}</h1></div>
    document.getElementById('example'));

(3)样式的使用:React推荐使用内联样式,我们可以使用camelCase语法来设置内联样式React会在指定元素数字后自动添加px.

(4)注释的使用:注释需要写在花括号内.

(5)数组的使用:JSX允许在模板中插入数组,数组会自动展开所有成员.

7.HTML标签和React组件的渲染

(1)React可以渲染HTML标签(strings)或React组件(classes).

(2)要渲染HTML标签,只需要在JSX里使用小写字母的标签名.

(3)要渲染React组件,只需创建一个大写字母开头的本地变量.

由于JSX就是JavaScript,一些标识符像class和for不建议作为XML属性名,作为替代。Reacr DOM 使用className和htmlFor来做对应的属性.

组件的介绍

1.组件即是函数

(1)对于一个独立组件而言,你可以把它看成是一个JavaScript函数.

(2)对于函数而言,当你通过传递参数调用函数时,函数会返回给你一个值,相比之下,对于React组件而言,道理是相似的,你传递属性给组件,而组件则会返回一个被渲染好的DOM.

组件的创建:

1.React推出后,出于对不同的原因先后出现三种定义react组件的方式.

(1)函数式定义的无状态组件.

(2)es5原生方式React.createClass定义的组件.

(3)es6形式的extends React.Component定义的组件.

2.无状态函数式组件

1.创建无状态函数式组件形式是从React 0.14版本开始出现的,它是为了创建纯展示组件,这种组件只负责跟据传入的props来展示,不涉及到要state状态的操作,具体的无状态函数式组件,其官方指出:

在大部分React代码中,大多数组件被写成无状态的组件,通过简单组合可以构建成其他的组件等;这种通过多个简单然后合并成一个大应用的设计模式被提倡。

React:

1.React.Component有三种手动绑定方法:可以在构造函数中完成绑定,也可以在调用时使用method.bind(this)来完成绑定,还可以使用arrowfunction来绑定。拿上例中的handleClick函数来说,其绑定可以有:

constructor(props) { super(props) };

this.handleClick = this.handleClick.bind(this);//构造函数中绑定

<div onClick={ this.handleClick.bind(this) } > </div>  //使用bind来绑定

<div onClick={ () = > this.handleClick() } > </div> //使用arrow function来绑定

对象继承:

1.bind( )方法的主要作用就是将函数绑定至某个对象,bind( )方法会创建一个函数,函数体内this对象的值会被绑定到传入bind( ) 函数的值. 

Function.prototype.bind(thisArg[, arg1[arg2[, ...]]])
eg:
Function.prototype.bind = function (context) {
     var self = this;//保存原函数
     return function () { //返回一个新函数
          return self.apply(context, arguments);//执行新函数时,将传入的上下文context作为新函数的this
     }
}

state状态

1.介绍:组件在运行时需要修改的数据就是状态.

(1)组件免不了要与用户互动,React的一大创新,就是将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染UI.

(2)this.state是会随着用户互动而产生变化的特性.

(3)React里,只需要更新组件的state,然后根据新的state重新渲染用户界面(不要操作DOM).

(4)我们通过this.state设置state的值.

(5)通过this.setState()设置state的值.

(6)state的作用域值作用在当前类,不污染顶级变量.

2.state的工作原理

(1)常用的通知React数据变化的方法是调用setState(data,callback).这个方法会合并(merge) data 到this.state,并重新渲染组件。渲染完成后,调用可选的callback回调。大部分情况下不需要提供callback,因为React会负责把界面更新到最新状态.

(2)state:

1)state是React中组件的一个对象,React把用户界面当作是状态机,想象它有不同的状态,然后渲染这些状态,可以轻松让用户界面与数据保持一致.

2)React中,更新组件的state,会导致重新渲染用户界面(不要操作DOM),简单来说,就是用户界面会随着state变化而变化.

3.setState用法:

(1)void setState(function|object nextState,[ function callback ])

1)setState方法通过一个队列机制实现state更新,当执行setState的时候,会将需要更新的state合并之后放入状态队列,而不会立即更新this.state(可以和浏览器的事件队列类比)。如果我们不使用setState而是使用this.state.key来修改,将不会触发组件的render。如果将this.state赋值给一个新的对象引用,那么其他不在对象上的state将不会被放入状态队列中,当下次调用setState并对状态队列进行合并时,直接造成了state丢失.

2)第二个参数是一个回调函数,在setState的异步操作结束并且组件已经重新渲染的时候执行,也就是说,我们可以通过这个回调来拿到更新的state的值.

4.props属性

(1)props相对于模块来说是外来属性,它经常用于模块之间的传值.

(2)state与props区别:

1)组件本质上是状态机,输入确定,输出一定确定。组件把状态与结果一一对应起来,组件中有state与props(状态与属性).

2)属性(props)是由父组件传递给子组件的;状态(state)是子组件内部维护的数据,当状态发生变化的同时,组件也会进行更新,当状态发生转换时会触发不同的钩子函数,从而让开发者有机会做出响应.

 React Refs

1.React支持一种非常特殊的属性Ref,你可以用来绑定到render( )输出的任何组件上.

2.是个特殊的属性,允许你引用render( )返回的相应的支撑实例( backing instance ).这样就可以确保在任何时间总是拿到正确的实例.

3.获取组件属性,或者设置组件属性可以使用原生js方法,也可以使用refs.

1)原生属性:例如单机按钮时让按钮背景颜色变化,给按钮添加个id,在handleClick里获得内容并且改变颜色.

2)ref:给按钮添加一个red属性,在对应的方法里用refs获得.

3)注:从react14版本以上,推荐使用ref回调函数方式.

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值