学习笔记(1)第一次使用react

1,react简介

  react组件文件:react中,一个组件由两个文件构成:xxx.jsx(组件的模板和逻辑)和xxx.css(组件的样式),react中没有组件样式隔离,所以组件的class要以组件名字开头,方式组件样式冲突。
  react模块是react框架的核心代码,其中包括了组件类和数据渲染的相关代码。

import React from 'react';

  react-dom模块是react在浏览器环境中运行的依赖模块,其中包含了将react组件和虚拟DOM以及真实DOM结合的代码。react除了可以和react-dom配合开发前端页面,还可以和react-native配合开发手机APP。

import ReactDOM from 'react-dom';

1.1,jsx语法

  Jsx语法:jsx是js和html混用的一种语法。在jsx中,一段html内容可以视为一个表达式,赋值给变量,或者做为函数调用的参数,或者作为函数的返回值,表达式的值是这段html所创建出的DOM。
react开发,使用的是jsx语法。
ReactDOM.render方法,把第一个参数的html内容渲染到第二个参数的DOM节点中。

ReactDOM.render(<App/>,document.getElementById('root'));

1.2,react函数组件

react函数组件只能声明组件的模板和使用传值,不能使用组件的数据、方法、生命周期函数等。
使用组件时,导入组件的jsx文件就可以直接使用。

import MyCom from "./components/MyCom/MyCom.jsx";

react中,一个组件的数据类型可以是一个函数,函数中返回组件的模板,这种组件叫做函数组件。

function App() {
 // 组件的模板只能有一个根标签。
 return (
// 在jsx语法中,class用于声明一个类,所以在标签中设置class要使用className
   <div className="App">
     <MyCom 
        str="abc123" 
// jsx中,html中可以通过{}嵌入js代码,表达式的值会被渲染到html中
         num={123}
      ></MyCom>
      <NumCtrl></NumCtrl>
   	</div>
);}

react中没有类似vue的计算结果,页面中绑定衍生数据时需要绑定方法调用。

<p>{this.fullName()}</p>

react组件的数据不能直接修改,否则页面不渲染,需要使用this.setState方法进行修改。

this.setState({
 num:e.target.value*1  });

2,生命周期钩子函数

  1. 组件创建并渲染完毕时调用。相当于vue的mounted
componentDidMount(){}
  1. 组件已经更新时调用 ,相当于vue的updated
componentDidUpdate(){ }
  1. 组件将要受到传值时或传值发生变化时调用
componentWillReceiveProps(){}
  1. 组件将要卸载时调用,相当于vue的destroyed
componentWillUnmount(){}

3,react条件渲染,列表渲染

react中使用 && 实现条件渲染

{this.state.show&&<p>条件渲染</p>}

//也可以使用三目运算符实现条件渲染
{this.state.show?<p></p>:<p></p>}

react组件中使用数组的map方法实现列表渲染

{this.state.list.map(el=>(
	<tr>
		<td>{el.name}</td>
		<td>{el.age}</td>
		<td>{el.online?"在线":"离线"}</td>
	</tr>
))}

4,react类组件

react声明一个组件需要 声明一个类并且继承于React.Component类。

class NumCtrl extends React.Component{}

constructor组件类的构造函数,构造函数的参数是组件接收的传值。

constructor(props){
	// 构造函数中要先通过super调用父类构造函数。
	super(props);
	console.log(props);
	// 构造函数中的this就是正在创建的组件
	// console.log(this);
	
	// 组件对象中的props属性中记录的是组件接收的传值。
	// console.log(this.props);
	
	// 组件对象的state属性中存储组件的数据
	this.state = {
		txt:"hello",
		age:99
	}
}

通过组件类的render方法设置组件的模板,render函数返回组件的模板。

render(){
	return (
	<div>
		<div>
			{/* react组件模板中使用onXxxxx绑定时间,和原生方法类似,但是名字使用的是驼峰命名 */}
			{/* 格式 onXxxxx={this.yyyyyy} */}
			{/* <button onClick={this.btnClick}>-</button> */}
			{/* react标签事件绑定方法名后不能加(),如果要自定义传参,需要嵌套
			一层箭头函数,在箭头函数中进行组件方法调用,就可以传参 */}
			<button onClick={e=>{
			this.btnClick("-");
			}}>-</button>
			{/* 组件中可以使用传值数据,格式 {this.props.xxxx} */}
			<span>{this.props.value}</span>
			<button onClick={e=>{
			this.btnClick("+");}}>+</button>
		</div>
		{/* 组件的模板中可以使用组件的数据,格式 {this.state.xxxx} */}
		<p>文本:{this.state.txt},:{this.state.age}</p>
 	</div>)
}

5,class和style绑定

react的模板中标签的style属性可以绑定一个对象。

	<p style={this.txtStyleObj()}></p>
	txtStyleObj(){
		return {
		color:this.state.color,
		fontSize:"30px",
		// "font-weight":"bold"
		fontWeight:"bold"
	}}

className不能直接绑定数组,可以通过数组.join转为字符串之后绑定。

<p className={this.txtClassArr()}</p>
txtClassArr(){
return ["pink-color","bold","yellow-bg"].join(" ");
}

className也不能直接绑定对象,需要将对象转为字符串之后绑定。

<p className={this.txtClassObj()}</p>
txtClassObj(){
		let o = {
		"pink-color":true,
		bold:true,
		"yellow-bg":false}
		
		let arr = [];
		for(let k in o){
		if(o[k]){
		arr.push(k);
	}}
	return arr.join(" ");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒鼎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值