以下纯属笔记,这些技术胖视频有
JSX 简介
JSX就是Javascript和XML结合的一种格式。React发明了JSX,可以方便的利用HTML语法来创建虚拟DOM,当遇到<
,JSX就当作HTML解析,遇到{
就当JavaScript解析.
组件和普通JSX语法区别
这个说起来也只有简单的一句话,就是你自定义的组件必须首写字母要进行大写,而JSX是小写字母开头的。
组件外层包裹原则
如果去掉组件最外层的<Div>
,就回报错,因为React要求必须在一个组件的最外层进行包裹。
Fragment标签讲解
加上最外层的DIV,组件就是完全正常的,但是你的布局就偏不需要这个最外层的标签怎么办?比如我们在作Flex
布局的时候,外层还真的不能有包裹元素。这种矛盾其实React16已经有所考虑了,为我们准备了<Fragment>
标签。
import React,{Component,Fragment } from 'react' // 然后把最外层的<div>标签,换成<Fragment>标签,代码如下。 import React,{Component,Fragment } from 'react' class Xiaojiejie extends Component{ render(){ return ( <Fragment> <div><input /> <button> 增加服务 </button></div> <ul> <li>头部按摩</li> <li>精油推背</li> </ul> </Fragment> ) } } export default Xiaojiejie
这时候你再去浏览器的Elements
中查看,就回发现已经没有外层的包裹了。
响应式设计和数据的绑定
React
不建议你直接操作DOM
元素,而是要通过数据进行驱动,改变界面中的效果。React会根据数据的变化,自动的帮助你完成界面的改变。所以在写React代码时,你无需关注DOM相关的操作,只需要关注数据的操作就可以了(这也是React如此受欢迎的主要原因,大大加快了我们的开发速度)。
数据定义在Xiaojiejie
组件中的构造函数里constructor
。
//js的构造函数,由于其他任何函数执行 constructor(props){ super(props) //调用父类的构造函数,固定写法 this.state={ inputValue:'' , // input中的值 list:[] //服务列表 } }
在React
中的数据绑定和Vue
中几乎一样,也是采用字面量
(我自己起的名字)的形式,就是使用{}
来标注,其实这也算是js代码的一种声明。比如现在我们要把inputValue
值绑定到input
框中,只要写入下面的代码就可以了。其实说白了就是在JSX中使用js代码。
<input value={this.state.inputValue} />
绑定事件
这时候你到界面的文本框中去输入值,是没有任何变化的,这是因为我们强制绑定了inputValue
的值。如果要想改变,需要绑定响应事件,改变inputValue
的值。
<input value={this.state.inputValue} onChange={this.inputChange.bind(this)} />
inputChange(e){ // console.log(e.target.value); // this.state.inputValue=e.target.value; this.setState({ inputValue:e.target.value }) }
列表绑定事件
<ul> { this.state.list.map((item,index)=>{ return ( <li key={index+item} onClick={this.deleteItem.bind(this,index)} > {item} </li> ) }) } </ul>
//删除单项服务 deleteItem(index){ let list = this.state.list list.splice(index,1) this.setState({ list:list }) }
// 不能这样写
//删除单项服务错误写法
deleteItem(index){
this.state.list.splice(index,1)
this.setState({
list:this.state.list
})
}
注意:React是禁止直接操作state的,虽然上面的方法也管用,但是在后期的性能优化上会有很多麻烦,所以一定不要这样操作