
传统上,将标记和逻辑分离到不同的文件中,用HTML来做结构,用来做造型,然后写来处理交互和数据操作。
但是,如果有一种 *** 可以将这些技术结合起来,简化开发过程,使其更容易建立复杂的用户界面,那会怎么样呢?这就是 *** X的作用。
在这篇文章中,你将了解什么是 *** X,它是如何工作的,以及为什么它对在 *** 开发中构建动态用户界面很重要。
让我们更详细地探讨这一革命性的技术。
*** X(JavaScript )是JavaScript的一个语法扩展,它允许开发者在JavaScript文件中编写类似HTML的代码。它是由meta(以前的Facebook)开发的。
*** X的语法类似于HTML,有打开和关闭标签、属性和嵌套元素。
例如,你可以写下面的 *** X代码来渲染一个简单的标题元素:
const heading = <h1>Hello, *** X!</h1>;
这段代码看起来像HTML,但它是JavaScript。const关键字创建了一个名为标题的新变量,该变量的值是 *** X表达式的结果。
*** X在中执行之前被转换为普通的JavaScript。这种转换是通过一个叫做转码器的工具完成的。更流行的 *** X转码器是Babel。
Babel将 *** X代码转换为一系列的函数调用。这些函数调用相当于 *** X中写的类似HTML的代码。然后,浏览器可以执行产生的JavaScript代码。
例如,下面的 *** X代码:
const element = <h1>Hello, world!</h1>;
被转化为以下JavaScript代码:
const element = React.createElement("h1", null, "Hello, world!");
这种转换使开发人员能够以熟悉和容易阅读的语法编写代码,同时仍然利用JavaScript的力量和灵活性。
*** X是的一个组成部分,允许开发者在一个文件中编写这些组件的标记和逻辑。
下面是一个React中的 *** X代码的简单例子:
import React from 'react';
function Greet() {
return <h1>Hello World!</h1>;
}
export default Greeting;
在这个例子中,你有一个名为 Greet 的功能组件,该组件渲染了一个带有问候信息的 h1 元素。
React编译器将把这段代码转化为可以被浏览器执行的优化的JavaScript代码,使该组件在屏幕上呈现。
下面是React编译器将把 Greet 组件转换成的内容:
import React from 'react'
function Greet() {
return React.createElement("h1", {}, "Hello, World!")
}
在这段代码中, *** X代码已被转化为 React.createElement 调用,创建与原始 *** X代码相同的结构和内容。
这就是React编译 *** X代码时在幕后发生的事情,使其能够被浏览器执行。然而,转换后的代码可能比原始 *** X代码的可读性差。
在React第17版中,引入了功能,它自动从React包的新入口点导入特殊函数,允许开发人员使用JsX,而不必在文件顶部导入React。
// Inserted by a compiler (don't import it yourself!)
import {jsx as _jsx} from 'react/jsx-runtime';
function App() {
return _jsx('h1', { children: 'Hello world' });
}
在 *** X中,JavaScript表达式可以直接嵌入到标记中以动态生成内容。这允许开发者使用JavaScript代码来计算值,执行操作,并在他们的 *** X组件中有条件地渲染内容。
这个例子显示了如何在J *** X中使用两个JavaScript表达式:
import React from 'react';
const MyComponent = () => {
const name = 'John';
const age = 30;
return (
<div>
<h1>Hello, {name}!</h1>
<p>You are {age} years old.</p>
<p>Next year, you will be {age + 1} years old.</p>
{age >= 18 && <p>You are an *** .</p>}
</div>
);
};
export default MyComponent;
在这个例子中,像{name}, {age}, {age + 1}, 和 {age >= 18 && <p>You are an *** .</p>} 这样的JavaScript表达式被用来根据姓名和年龄变量的值来动态渲染内容。
CSS可以通过各种方式应用于 *** X组件,如内联样式、独立的CSS文件或CSS-in- *** 库。内联样式是使用JavaScript对象直接在 *** X标记中定义的,而单独的CSS文件或CSS-in- *** 库允许组件的外部和模块化样式。
这个例子显示了如何使用 *** X中的style属性,将使用JavaScript对象定义的内联样式应用于元素:
import React from 'react';
const MyComponent = () => {
const styles = {
backgroundColor: 'blue',
color: 'white',
padding: '10px'
};
return (
<div style={styles}>
<h1>Hello, World!</h1>
<p>This is a component with inline styles.</p>
</div>
);
};
export default MyComponent;
在这个例子中,像 backgroundColor 、 color 和padding这样的CSS属性被设置为style对象中的键值对,而它们的值是代表CSS值的字符串。
注意:虽然内联样式提供了灵活性和简单性,但建议使用CSS类或CSS-in- *** 库,以便在更大的应用程序中获得更复杂或可重复使用的样式。
在编写 *** X代码时,你应该遵循一些规则,以确保代码的有效性和易读性。
在 *** X中,你必须总是返回一个单一的根元素。这意味着你所有的JsX代码必须包含在一个单一的最外层元素中。例如,这是有效的 *** X:
return ( <div> <h1>Hello World!</h1> <p>This is my first React component.</p> </div> )
但这并不是因为它返回两个元素而不是一个:
return ( <h1>Hello World!</h1> <p>This is my first React component.</p> )
在将HTML代码转换为J *** X时,必须牢记这一点。
在HTML中,你会使用 class 属性来指定一个元素的CSS类别。然而,在 *** X中,你需要使用 className 属性来代替。比如说:
// Good <div className="my-class">This element has a CSS class.</div> // Bad <div class="2345HAOf833c993764def01 my-class">This element has a CSS class.</div>
使用 className 而不是 class 是很重要的,可以避免命名冲突,因为 class 是JavaScript中的一个保留关键字。
当你需要在 *** X代码中包含一个JavaScript表达式时,你需要用大括号{}来包裹它。这可以用于任何事情,从显示动态数据到有条件地渲染组件。下面是一个例子:
// Good
<div>{myVariable}</div>
// Bad
<div>myVariable</div>
你也可以在大括号内执行数学运算,如:
<p>The total cost is {25*10}</p>
另外,在你的大括号内,你可以使用三元运算符设置条件语句:
<h1>{(x) < 15 ? "Welcome" : "Goodbye"}</h1>
下面是一个用React组件的更好的例子:
function Greeting() {
const isLoggedIn = true;
return (
<div>
{isLoggedIn ? (
<h1>Welcome back!</h1>
) : (
<h1>Please log in.</h1>
)}
</div>
);
}
在这个例子中,我们定义了一个Greeting组件。该组件使用三元操作符,根据 isLoggedIn 的值,有条件地渲染一个问候语。如果 isLoggedIn 为 true,该组件将渲染一个 h1 元素,其文本为 “Welcome back!”。如果 isLoggedIn 是 false,该组件将呈现一个 h1 元素,其文本为 “Please log in”。
在 *** X中,大多数东西都使用camelCase,包括属性、事件处理程序和变量名。这个惯例与JavaScript的命名惯例一致,有助于保持可读性。
例如,使用 onClick 而不是 onclick ,使用 className 而不是 class 。
// Good
<button onClick={handleClick} className="btn">Click me!</button>
// Bad
<button onclick={handle_click} class="2345HAOc993764def0186c5 btn">Click me!</button>
在 *** X中,你需要始终使用闭合标签,即使它们没有任何内容。比如说:
// Good <div></div> // Bad <div/>
如果你有一个没有任何内容的元素,你可以用一个自闭合标签来代替开闭标签。
// Good <img src="my-image.jpg" alt="My Image"/> // Bad <img src="my-image.jpg" alt="My Image"></img>
*** X对 *** 开发很重要,因为:
*** X是JavaScript的一个语法扩展,它允许开发者在JavaScript文件中编写类似HTML的标记。这使得为 *** 应用程序创建动态和互动的用户界面更加容易。
你已经学会了一些在使用 *** X时需要遵循的规则–通过遵循这些规则,我们可以写出干净、可读、可维护的代码,并与JavaScript的命名惯例保持一致。
不久前,PHP 8.0大张旗鼓地发布了。它带来了许多新特性、性能增强和变化——其中最令人兴奋的是新的JIT编译器。 技术世界总是在向前发展,PHP也是如此。 ,包含了几个令人兴奋的特性。它定于今年晚些时候于2021年11月25日发布。 在本文中,我们将详细介绍PHP 8.1将带来哪些新的东...
本章节主要是对宝塔面板的主界面的各个版本进行一个简单的说明。 宝塔面板主界面主要包括:服务器操作系统、服务器状态、站点信息、软件管理及网络流量几个部分。 Windows面板有部分功能未实现,其余部分与Linux面板同步。 系统操作...
使用宝塔面板,您可以快速地创建一个FTP管理账户,对网站文件进行管理。但有必要提醒大家的是,使用FTP远不如使用SFTP安全,你可以查看文章“”进一步了解两者之间的差异。 此外,宝塔面板的文件管理模块其实已经能够满足站长的大部分文件管理需求。当然,如果你非得要使用FTP管理服务器文件,可以参照以下...
对于初学者和那些刚刚进入WordPress开发的人来说,PHP是您可以开始的最佳起点之一。这是一种超级简单直接的语言,使其成为之一,因此相当容易上手,它构成了在线开发的支柱。另外,如果你想在WordPress后端工作,你肯定需要学习它。 但是,如果您不想在昂贵的大学课程上花费数月或数年时间怎么...
您是否正在寻找成功的方法来加快Laravel的性能,同时在您的项目上工作?你来对地方了! Laravel是一个流行的开源PHP框架,以其强大的安全性和简单而复杂的编码架构而闻名。它是构建能够推动收入和推动业务发展的尖端Web应用程序的绝佳选择。 尽管如此,如果你不使用正确的优化技术,Lara...
薪水可能是某些人的禁忌话题,但如果您是WordPress开发人员,或者正在考虑从事WordPress开发工作,那么了解人们的收入对于最大化您自己的赚钱能力至关重要。 所以让我们谈谈这个秘密——让我们谈谈WordPress开发人员的平均工资。这样,您将确切地知道自己的价值(以及如何赚取更多)。...