Home Web Front-end JS Tutorial An introductory tutorial for learning JSX syntax in JavaScript's React framework_Basic knowledge

An introductory tutorial for learning JSX syntax in JavaScript's React framework_Basic knowledge

May 16, 2016 pm 03:12 PM
javascript js jsx react

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);
Copy after login

What will an XML tag, such as be converted into by the JSX conversion tool?

For example:

var Nav = React.createClass({/*...*/});
var app = <Nav color="blue"><Profile>click</Profile></Nav>;
Copy after login

will be converted to:

var Nav = React.createClass({/*...*/});
var app = React.createElement(
 Nav,
 {color:"blue"},
 React.createElement(Profile, null, "click")
);
Copy after login

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 ...]
)
Copy after login

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
Copy after login

And use the command line tool to convert (for specific usage, please refer to jsx -h):

jsx src/ build/
Copy after login

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') 
); 

Copy after login

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') 
); 

Copy after login

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') 
); 

Copy after login

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') 
); 

Copy after login

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>

Copy after login

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);
Copy after login

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" />
Copy after login

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>
);

Copy after login

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({ ... });

Copy after login

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)
  )
 )
);
Copy after login

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 &#63; <Nav /> : <Login />}</Container>;
// Output (JS):
var content = React.createElement(
 Container,
 null,
 window.isLoggedIn &#63; React.createElement(Nav) : React.createElement(Login)
);
Copy after 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!");

Copy after login

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>
Copy after login

传播属性(Spread Attributes)

在JSX中,可以使用...运算符,表示将一个对象的键值对与ReactElement的props属性合并,这个...运算符的实现类似于ES6 Array中的...运算符的特性。

var props = { foo: x, bar: y };
var component = <Component { ...props } />;
Copy after login

这样就相当于:

var component = <Component foo={x} bar={y} />
Copy after login

它也可以和普通的XML属性混合使用,需要同名属性,后者将覆盖前者:

var props = { foo: 'default' };
var component = <Component {...props} foo={'override'} />;
console.log(component.props.foo); // 'override'
Copy after login

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Recommended: Excellent JS open source face detection and recognition project Recommended: Excellent JS open source face detection and recognition project Apr 03, 2024 am 11:55 AM

Face detection and recognition technology is already a relatively mature and widely used technology. Currently, the most widely used Internet application language is JS. Implementing face detection and recognition on the Web front-end has advantages and disadvantages compared to back-end face recognition. Advantages include reducing network interaction and real-time recognition, which greatly shortens user waiting time and improves user experience; disadvantages include: being limited by model size, the accuracy is also limited. How to use js to implement face detection on the web? In order to implement face recognition on the Web, you need to be familiar with related programming languages ​​and technologies, such as JavaScript, HTML, CSS, WebRTC, etc. At the same time, you also need to master relevant computer vision and artificial intelligence technologies. It is worth noting that due to the design of the Web side

Essential tools for stock analysis: Learn the steps to draw candle charts with PHP and JS Essential tools for stock analysis: Learn the steps to draw candle charts with PHP and JS Dec 17, 2023 pm 06:55 PM

Essential tools for stock analysis: Learn the steps to draw candle charts in PHP and JS. Specific code examples are required. With the rapid development of the Internet and technology, stock trading has become one of the important ways for many investors. Stock analysis is an important part of investor decision-making, and candle charts are widely used in technical analysis. Learning how to draw candle charts using PHP and JS will provide investors with more intuitive information to help them make better decisions. A candlestick chart is a technical chart that displays stock prices in the form of candlesticks. It shows the stock price

WebSocket and JavaScript: key technologies for implementing real-time monitoring systems WebSocket and JavaScript: key technologies for implementing real-time monitoring systems Dec 17, 2023 pm 05:30 PM

WebSocket and JavaScript: Key technologies for realizing real-time monitoring systems Introduction: With the rapid development of Internet technology, real-time monitoring systems have been widely used in various fields. One of the key technologies to achieve real-time monitoring is the combination of WebSocket and JavaScript. This article will introduce the application of WebSocket and JavaScript in real-time monitoring systems, give code examples, and explain their implementation principles in detail. 1. WebSocket technology

PHP, Vue and React: How to choose the most suitable front-end framework? PHP, Vue and React: How to choose the most suitable front-end framework? Mar 15, 2024 pm 05:48 PM

PHP, Vue and React: How to choose the most suitable front-end framework? With the continuous development of Internet technology, front-end frameworks play a vital role in Web development. PHP, Vue and React are three representative front-end frameworks, each with its own unique characteristics and advantages. When choosing which front-end framework to use, developers need to make an informed decision based on project needs, team skills, and personal preferences. This article will compare the characteristics and uses of the three front-end frameworks PHP, Vue and React.

PHP and JS Development Tips: Master the Method of Drawing Stock Candle Charts PHP and JS Development Tips: Master the Method of Drawing Stock Candle Charts Dec 18, 2023 pm 03:39 PM

With the rapid development of Internet finance, stock investment has become the choice of more and more people. In stock trading, candle charts are a commonly used technical analysis method. It can show the changing trend of stock prices and help investors make more accurate decisions. This article will introduce the development skills of PHP and JS, lead readers to understand how to draw stock candle charts, and provide specific code examples. 1. Understanding Stock Candle Charts Before introducing how to draw stock candle charts, we first need to understand what a candle chart is. Candlestick charts were developed by the Japanese

Integration of Java framework and front-end React framework Integration of Java framework and front-end React framework Jun 01, 2024 pm 03:16 PM

Integration of Java framework and React framework: Steps: Set up the back-end Java framework. Create project structure. Configure build tools. Create React applications. Write REST API endpoints. Configure the communication mechanism. Practical case (SpringBoot+React): Java code: Define RESTfulAPI controller. React code: Get and display the data returned by the API.

JavaScript and WebSocket: Building an efficient real-time weather forecasting system JavaScript and WebSocket: Building an efficient real-time weather forecasting system Dec 17, 2023 pm 05:13 PM

JavaScript and WebSocket: Building an efficient real-time weather forecast system Introduction: Today, the accuracy of weather forecasts is of great significance to daily life and decision-making. As technology develops, we can provide more accurate and reliable weather forecasts by obtaining weather data in real time. In this article, we will learn how to use JavaScript and WebSocket technology to build an efficient real-time weather forecast system. This article will demonstrate the implementation process through specific code examples. We

Simple JavaScript Tutorial: How to Get HTTP Status Code Simple JavaScript Tutorial: How to Get HTTP Status Code Jan 05, 2024 pm 06:08 PM

JavaScript tutorial: How to get HTTP status code, specific code examples are required. Preface: In web development, data interaction with the server is often involved. When communicating with the server, we often need to obtain the returned HTTP status code to determine whether the operation is successful, and perform corresponding processing based on different status codes. This article will teach you how to use JavaScript to obtain HTTP status codes and provide some practical code examples. Using XMLHttpRequest

See all articles