jsx
- jsx(javascript XML),是js的语法扩展,在react中jsx不是必须的,而是react推荐使用的一种语法格式,使用jsx语法能是代码更加优雅,易于维护
- jsx是什么?(在js中可以写html标签)
- jsx是react的元素,声明的组件实例化,即为元素。例:
即为元素 - jsx是一种变量(对象),在jsx结构中 要使用 {} 包裹
- jsx可以无限嵌套
- 在jsx中,class要写成className,for要写成htmlFor,tabindex要写成tabIndex
- jsx可以防注入(XSS)攻击
- jsx中可以使用任何的表达式
- jsx中,React元素的属性值为变量也需要使用 {} 包裹
- jsx中可以直接使用数组
- jsx是react的元素,声明的组件实例化,即为元素。例:
React
- npm install react -s react核心
- npm i react-dom -s react-dom渲染dom
- ReactDOM.render(
, document.getElementById(‘app’)); 找到id为app的节点,渲染App组件
react组件
两种定义组件的方法: class类组件、函数式组件(无状态组件)
// class 类组件 // 1.它有声明周期,state,this,ref,context等特性 // 2.有一个必须的生命周期render // 3.相对于函数式组件,类组件性能(渲染速度)稍差 class TestProps1 extends React.Component { constructor(props) { super(props) this.state = { count: 1, } } render () { return ( <div> <h1>类组件</h1> </div> ) } }
// 函数式组件(无状态组件) // 1.它没有 生命周期,state,this,ref,context等特性 // 2.这个函数式组件必须return,并且一定返回React元素 // 3.相对于类组件,函数式组件的性能(渲染速度)较好 function TestProps2 () { return ( <div> <h1>无状态组件--1</h1> </div> ) }
props
- 在react中,props非常强大,它是父子组件之间的纽带
- props用于从父组件向子组件传值,传递的值可以是任意类型或react组件
- 在类组件中,props和state原则上不能相互赋值,可能会造成意外的报错
父子组件通信
父组件向子组件传值,使用自定义属性
子组件向父组件传值,使用定义事件,在子组件内触发
自定义属性和自定义事件,子组件都是通过props接收
父组件接收子组件的参数
// 父组件接收子组件lang参数 onLangChange={ (lang) => this.langChange(lang) } // 子组件触发函数 onLangChange(lang)
事件绑定
- react中,所有的事件绑定都以on开头,使用驼峰命名
类组件
// 事件绑定 // 使用ES5绑定事件处理函数改变this指向,事件对象,永远都是事件处理函数的最后一个参数 onClick={this.click.bind(this)} // 事件声明 click (event) { console.log(this) console.log(event) console.log('div click'); }
// 使用ES6改变this指向,事件对象要手动传入 onClick={(event) => {this.handleClick2(event)}} handleClick2 (event) { console.log(this) console.log(event) console.log('handleClick2') }
函数式组件,获取事件对象及传参
function Child (props) { function handleClick (event,agr1) { console.log('handle click'); console.log(event); console.log(agr1); } return ( <div> {/* <button onClick={handleClick}>子组件 别点我</button> */} {/* 函数式组件传参 */} <button onClick={(event) => handleClick(event,100)}>子组件 别点我</button> </div> ) }
在react中阻止事件冒泡:event.stopPropagation();
组视事件默认行为: event.preventDefault();
监听键盘事件:
inputChange (event) { if (event.keyCode === 13) { console.log(event.target.value); } }