React-JSX

const element = 

Hello, world!

;

这种看起来可能有些奇怪的标签语法即不是字符串也不是HTML,它被称为JSX, 一种JavaScript的语法扩展。推荐在React中使用JSX来描述用户界面, 虽然React并不强制要求使用JSX。JSX用来声明React当中的元素。

JSX语法的特点就是,凡是使用JavaScript的值的地方,都可以插入这种类似HTML的语法。

在JSX中使用表达式

你可以任意地在JSX当中使用Javacript表达式,在JSX当中的表达式要包含在大括号中。

function formatName(user) {
  return user.firstName + ' ' + user.lastName;
}

const user = {
  firstName: 'Harper',
  lastName: 'Perez'
};

const element = (
  

Hello, {formatName(user)}!

); ReactDOM.render( element, document.getElementById('root') );

在编译之后,JSX其实会被转代为普通 的JavaScript对象,这也意味着,你其实可以在if或者for语句里使用JSX,将它赋值给变量,当作参数传入,作为返回值都可以。

function getGreeting(user) {
  if (user) {
    return 

Hello, {formatName(user)}!

; } return

Hello, Stranger.

; }

1、所有HTML标签必须是闭合的。

2、顶层只能有一个标签,也就是只能有一个根元素。

3、一般来说,HTML原生标签都使用小写,开发者自定义的组件标签首字母大写。

4、更正式、更通用的组件写法,要使用ES6类的语法。

5、组件内部,所有参数都放在this.props属性上面。这个对象有一个非常特殊的参数this.props.children,表示当前组件“包裹”的所有内容。

6、组件的内部状态记录在this.state这个对象上面。

7、组件的运行过程中,存在不同的阶段,react为这些阶段提供了钩子方法。

(1)componentDidMount会在组件挂载后自动调用。

(2)componentWillUnmount会在组件卸载前自动调用

(3)componentDidUpdate会在UI每次更新事调用。

(4)shouldComponentUpdate(nextProps,nextState),每当this.props或this.state有变化,在render方法执行之前,就会调用这个方法。该方法返回一个布尔值,表示是否应该继续执行render方法,即如果返回false,UI就不会更新,默认返回true。组件挂载时,render方法的第一次执行,不会调用这个方法。

(5)static getDerivedStateFromProps(props, state),该方法在render方法执行之前调用,包括组件的第一次挂载。它应该返回一个新的state对象,通常用在组件状态依赖外部输入的参数的情况。

(6)getSnapshotBeforeUpdate():该方法在每次DOM更新之前调用,用来收集DOM信息。它返回的值,将作为参数传入componentDidUpdate()方法。

JSX属性

你可以使用引号来定义以字符串为值的属性:

const element = 
;

也可以使用大括号来定义以JavaScript表达式为值的属性:

const element = ;

因为JSX的特性更接近JavaScript而不是HTML,所以React DOM使用camelCase命名来定义属性的名称。

JSX防注入攻击

所有的内容在渲染之前都被转换成字符串,这样可以有效防止XSS攻击。

 

Babel会把JSX转译成一个名为React.createElement()函数调用.

 

最后欢迎大家访问我的个人网站:1024s

你可能感兴趣的:(react)