React基本概念

JSX

先看以下代码:

	const element = <h1>Hello, world!</h1>;
  • 这种在JS中写标签的语法叫JSX-JavaScript XML
  • 它既不是字符串也不是HTML
  • 本质上是 React.createElement ( ) 的语法糖,最终产生一个JS对象
  • 这些对象被称为 “React元素
  • 因为它产生一个JS对象,因此可以通过引号或者大括号来指定属性
	const element = <div tabIndex="0"></div>;
	const element = <img src={user.avatarUrl}></img>;

基本语法规则:

  • 遇到< >开头的代码,以标签的语法解析:html同名标签转换为html同名元素,其他标签则需要特别解析
  • 遇到{ }开头的代码,以JS语法解析,且标签中的 js 表达式必须用 { } 包含

元素

  • 元素描述了你在屏幕上想看到的内容
  • 与浏览器的 DOM 元素不同,React 元素是创建开销极小的普通对象
  • React通过读取这些对象,然后使用它们来构建 DOM 以及保持随时更新
  • React元素是不可变对象。一旦被创建,就无法更改他的子元素或者属性
  • 想要更新UI唯一的方式是创建一个全新的元素,并将其传入 ReactDOM.render ( )
  • 渲染元素:
    想要将一个 React 元素渲染到根 DOM 节点中,只需要把它传入 ReactDOM.render ( ) 里
	const element = <h1>Hello, world</h1>;
	ReactDOM.render(element, document.getElementById('root'));

组件

由于元素没有办法传递参数,为了解决这个问题引入组件。

组件,从概念上类似于 JavaScript 函数。它接受任意的入参(即“props”),并返回用于描述页面展示内容的 React 元素(实现界面局部功能的代码和资源的集合)。

  • 函数组件
	function Welcome(props) {
	  return <h1>Hello, {props.name}</h1>;
	}
	ReactDOM.render(<Welcome/>,document.getElementById('root'));

执行了ReactDOM.render( )后,发生了什么?

  1. React解析组件标签,找到了 Welcome
  2. 发现组件是使用函数定义的,随后调用该函数,将返回的虚拟DOM转为真实DOM,随后呈现在页面上。
  • class 组件
	class Welcome extends React.Component {
	  render() {
	    return <h1>Hello, {this.props.name}</h1>;
	  }
	}
	ReactDOM.render(<Welcome/>,document.getElementById('root'));

执行了ReactDOM.render( )后,发生了什么?

  1. React解析组件标签,找到了 Welcome
  2. 发现组件是使用类定义的,随后new出来该类的实例,并通过该实例调用到原型上的render方法
  3. 将render返回的虚拟DOM转为真实DOM,随后呈现在页面中
  • 渲染组件
	function Welcome(props) {
	  return <h1>Hello, {props.name}</h1>;
	}
	//创建对象,并指定属性
	const element = <Welcome name="Sara" />;
	ReactDOM.render(
	  element,
	  document.getElementById('root')
	);

让我们来回顾一下这个例子中发生了什么:

  • 我们调用 ReactDOM.render() 函数,并传入 < Welcome name=“Sara” /> 作为参数
  • React 调用 Welcome 组件,并将 { name: ‘Sara’ } 作为 props 传入
  • Welcome 组件将 < h1 >Hello, Sara< /h1 > 元素作为返回值
  • React DOM 将 DOM 高效地更新为 < h1 >Hello, Sara< /h1 >

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

Props

在 react 中可以将任何东西(对象、函数等)作为props进行传递。

State

React 有一个严格的规则:所有的组件的props都不能被更改。为了在不违反这个规则的情况下,能够更改输出内容,引入了“state”概念。

state 不可直接更改,如需更改,调用setState
setState修改state的方式是浅合并,即需要修改的替换,不需要修改的保持不变
state值是对象(包含多个key-value组合)

初始化state的两种方法:

在React的组件中可以在两个位置来初始化state:
(1)在组件的constructor中;
(2)直接在class中利用属性赋值的方式
在这里插入图片描述

展开运算符(…)

回调函数就是传递一个参数化的函数

生命周期方法:为class组件声明的一些特殊的方法,当组件挂载或卸载时就会去执行这些方法

将事件处理函数通过箭头函数的形式来定义,就不必强制绑定this(见上图)

渲染和更新机制

React 渲染流程:
在这里插入图片描述
React 更新流程:
在这里插入图片描述

列表与key

react在渲染列表时必须指定一个唯一个key。

一个好的经验法则是:在 map() 方法中的元素需要设置 key 属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值