


What is JSX?
When writing components with React, JSX syntax is usually used. At first glance, it looks like XML tags are written directly in the Javascript code. In fact, this is just syntax sugar. Every XML tag will be JSX The conversion tool converts it into pure Javascript code. Of course, you can also write it directly in pure Javascript code. However, by using JSX, the structure of the component and the relationship between the components will look clearer.
var MyComponent = React.createClass({/*...*/}); var myElement = <MyComponent someProperty={true} />; React.render(myElement, document.body);
What will an XML tag, such as
For example:
var Nav = React.createClass({/*...*/}); var app = <Nav color="blue"><Profile>click</Profile></Nav>;
will be converted to:
var Nav = React.createClass({/*...*/}); var app = React.createElement( Nav, {color:"blue"}, React.createElement(Profile, null, "click") );
In other words, when we write an XML tag, we are essentially calling the React.createElement method and returning a ReactElement object.
ReactElement createElement( string/ReactClass type, [object props], [children ...] )
The first parameter of this method can be a string, which represents an element within the HTML standard, or an object of ReactClass type, which represents the custom component we have encapsulated before. The second parameter is an object, or a dictionary, which saves all the inherent attributes of this element (that is, the value that basically does not change after being passed in). Beginning with the third parameter, all subsequent parameters are considered child elements of the element.
JSX Converter
There are many ways to convert code with JSX syntax into pure Javascript code. For inline and HTML code or external files that have not been converted, type="text" must be added to the script tag. /jsx" and introduce the JSXTransformer.js file. However, this method is not recommended for use in a production environment. The recommended method is to convert the code before it goes online. You can use npm to install react-tools globally:
npm install -g react-tools
And use the command line tool to convert (for specific usage, please refer to jsx -h):
jsx src/ build/
If you use automation tools, such as gulp, you can use the corresponding plug-in gulp-react.
Using JS in HTML template
It is very convenient to use JS in HTML templates. You only need to use curly brackets to surround the JS code.
var names = ['Alice', 'Emily', 'Kate']; React.render( <div> { names.map(function (name) { return <div>Hello, {name}!</div> }) } </div>, document.getElementById('example') );
When compiled it becomes like this:
var names = ['Alice', 'Emily', 'Kate']; React.render( React.createElement("div", null, names.map(function (name) { return React.createElement("div", null, "Hello, ", name, "!") }) ), document.getElementById('example') );
It should be noted that the curly braces are actually a variable output expression. JSX ultimately directly passes the content in the curly braces as the third parameter of React.createElement (passed in directly without any modification). Therefore, only one line of expression can be placed in it, and any way of writing that cannot be directly used as the third parameter is wrong, so it is wrong for you to write like this:
React.render( <div> { var a = 1; names.map(function (name) { return <div>Hello, {name}!</div> }) } </div>, document.getElementById('example') );
Because it is obvious that the content within the curly braces is placed directly on the third parameter, and the syntax is incorrect.
This is also wrong to write:
React.render( <div> { var a = 1; } </div>, document.getElementById('example') );
Because React.createElement(“div”, null, var a = 1;) is a syntax error.
Then you can also understand why the js expression in curly brackets cannot end with a semicolon.
It should be noted that if you output a JS variable in an attribute, you cannot add quotes, otherwise it will be treated as a string and not parsed.
It should look like this:
<a title={title}>链接</a>
Use HTML tags
To create an element that exists in the HTML standard, just write HTML code directly:
var myDivElement = <div className="foo" />; React.render(myDivElement, document.body);
However, it should be noted that the two attributes of class and for, JSX syntax will eventually be converted into pure Javascript, so className and htmlFor must be used just like in Javascript DOM.
Another point is that when creating elements within the HTML standard, the JSX converter will discard those non-standard attributes. If you must add custom attributes, you need to add the data- prefix before these custom attributes.
<div data-custom-attribute="foo" />
Namespace components
For example, when developing a component, a component has multiple sub-components. If you want these sub-components to be used as attributes of its parent component, you can use it like this:
var Form = MyFormComponent; var App = ( <Form> <Form.Row> <Form.Label /> <Form.Input /> </Form.Row> </Form> );
This way you only need to set the child component’s ReactClass as a property of its parent component:
var MyFormComponent = React.createClass({ ... }); MyFormComponent.Row = React.createClass({ ... }); MyFormComponent.Label = React.createClass({ ... }); MyFormComponent.Input = React.createClass({ ... });
The creation of child elements can be directly handed over to the JSX converter:
var App = ( React.createElement(Form, null, React.createElement(Form.Row, null, React.createElement(Form.Label, null), React.createElement(Form.Input, null) ) ) );
This feature requires version 0.11 and above
Javascript expression
To write Javascript expressions in JSX syntax, you only need to use {}, such as the following example using the ternary operator:
// Input (JSX): var content = <Container>{window.isLoggedIn ? <Nav /> : <Login />}</Container>; // Output (JS): var content = React.createElement( Container, null, window.isLoggedIn ? React.createElement(Nav) : React.createElement(Login) );
However, it should be noted that JSX syntax is just syntactic sugar. Behind it is calling ReactElement's constructor method React.createElement, so writing like this is not allowed:
// This JSX: <div id={if (condition) { 'msg' }}>Hello World!</div> // Is transformed to this JS: React.createElement("div", {id: if (condition) { 'msg' }}, "Hello World!");
You can see obvious syntax errors in the converted Javascript code, so either use the ternary operator or write like this:
if (condition) <div id='msg'>Hello World!</div> else <div>Hello World!</div>
传播属性(Spread Attributes)
在JSX中,可以使用...运算符,表示将一个对象的键值对与ReactElement的props属性合并,这个...运算符的实现类似于ES6 Array中的...运算符的特性。
var props = { foo: x, bar: y }; var component = <Component { ...props } />;
这样就相当于:
var component = <Component foo={x} bar={y} />
它也可以和普通的XML属性混合使用,需要同名属性,后者将覆盖前者:
var props = { foo: 'default' }; var component = <Component {...props} foo={'override'} />; console.log(component.props.foo); // 'override'

在react中,canvas用于绘制各种图表、动画等;可以利用“react-konva”插件使用canvas,该插件是一个canvas第三方库,用于使用React操作canvas绘制复杂的画布图形,并提供了元素的事件机制和拖放操作的支持。

在react中,antd是基于Ant Design的React UI组件库,主要用于研发企业级中后台产品;dva是一个基于redux和“redux-saga”的数据流方案,内置了“react-router”和fetch,可理解为应用框架。

React不是双向数据流,而是单向数据流。单向数据流是指数据在某个节点被改动后,只会影响一个方向上的其他节点;React中的表现就是数据主要通过props从父节点传递到子节点,若父级的某个props改变了,React会重渲染所有子节点。

因为在react中需要利用到webpack,而webpack依赖nodejs;webpack是一个模块打包机,在执行打包压缩的时候是依赖nodejs的,没有nodejs就不能使用webpack,所以react需要使用nodejs。

在react中,forceupdate()用于强制使组件跳过shouldComponentUpdate(),直接调用render(),可以触发组件的正常生命周期方法,语法为“component.forceUpdate(callback)”。

react是组件化开发;组件化是React的核心思想,可以开发出一个个独立可复用的小组件来构造应用,任何的应用都会被抽象成一颗组件树,组件化开发也就是将一个页面拆分成一个个小的功能模块,每个功能完成自己这部分独立功能。

react与vue的虚拟dom没有区别;react和vue的虚拟dom都是用js对象来模拟真实DOM,用虚拟DOM的diff来最小化更新真实DOM,可以减小不必要的性能损耗,按颗粒度分为不同的类型比较同层级dom节点,进行增、删、移的操作。

react和reactdom的区别是:ReactDom只做和浏览器或DOM相关的操作,例如“ReactDOM.findDOMNode()”操作;而react负责除浏览器和DOM以外的相关操作,ReactDom是React的一部分。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Dreamweaver CS6
Visual web development tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool
