Day8 撰写JSX

在JSX中嵌入javascript表达式

,要使用在JSX中用大括号{}将包javascript表达式包起来就可以使用了。

在大括号{ }中可以使用:

  • javascript表达式,计算过得到的
  • 变数或常数
  • 阵列值
  • 回呼函式
  • 三元运算子
  • /.../注解

等等...

function greeting(){
	return 'Hello'
};
const name = 'Amy';


function App() {
  return (
  <h1>
    {greeting()+ ','+name}
  </h1>
)};

https://ithelp.ithome.com.tw/upload/images/20210923/20140303cES5yMpAt9.png

在 JSX 中使用 三元运算子

因为只能使用 JavaScript表达式,所以在 JSX 无法使用 if (if 是一个陈述式) ,但是可以使用 JavaScript 三元运算子。

function App() {
  return (
  <a>{data.login?'登出':'登入'}</a>
)};

JSX 本身也是 Javascript 表达式

在编译之後,JSX转换成一个function返回的Javascript的物件形式(请参考第七天的文章)。

可以在function里的if 跟 for 回圈中使用 JSX,可以在JSX中使用function传入的参数。

function getName(name) {
  if (name {
    return <h1>Hello, {name}!</h1>;
  }
  return <h1>Hello, admin.</h1>;
}

JSX的标签

React可以使用html标签和React自定的元件标签

html标签使用英文小写字做为开头

const element =<div>Hello!</div>

自订元件标签使用英文大写字做为开头(可使用大驼峰写法)

const element =<MyComponent>Hello!</MyComponent>

JSX 的属性

跟 HTML 一样 JSX 的 tag 可以有属性:

可以使用引号,引号里面的属性值的型态是字串

const element = <img src="image/image.jpg" />;

也可以透过 { } 使用javascript给予不同型态的动态属性值:

const element = <img src={webImage.Url} />

因为 JSX 是 JavaScript,所以React元素的属性名称也是按照 JavaScript 原生的语法中的className去定义属性。而 for 则是要用 htmlFor。

例如:

const element = <h1 className="title">Hello, world!</h1>;

JSX的子元素(Children)

在 JSX 包含开始与结束标签的情形下,夹在两者之间的内容为children,我们可以靠children传递状态( prop)到元件之中。在後面文章会详细说明React的prop传递。

Children的类型有很多种:

JavaScript 表达式、字串、Functions、另一个元件都能是Children。

const element = 
<MyComponent> 
'标签里面的都称为Children'
</MyComponent>

如果标签内为空,要用 /> 关闭这个标签

const element = <img src={webImage.Url} />


JSX语法中只能有一个根元素

多个元素的情况下会造成无法编译为React.createElement的形式

需要把子元素包在一个根元素下面,像下面范例中最外层的 <div></div>

//错误
function App() {
  return (
  <h1>标题</h1>
	<p>内文</p>
)};

//必须有根元素
function App() {
  return (
	<div>
		  <h1>标题</h1>
			<p>内文</p>
	</div>
)};

从 React 16 起,新增了 Fragment 的功能,让你不需要在 DOM 中增加这个额外节点了:

function App() {
  return (
	<>
		  <h1>标题</h1>
			<p>内文</p>
	</>
)};

<<:  【D9】厨具熟练後制作精致:使用历史资料的Kbar做MA(移动平均线)图

>>:  [FGL] TYPE / FUNCTION / INTERFACE 让FGL更贴近物件语言

【网路概论】L6-1 网路层协议

网路层协议 基本过程 终端设备藉由网路传输到另一个终端 经过以下四个基本过程 终端编址(addres...

Day 25 [模块化] 前端模块化:CommonJS,AMD,CMD,ES6

文章参考自 https://juejin.im/post/6844903744518389768 h...

Annotation Processor 的运作

运作方式 经过前面这麽漫长的铺陈,我们终於要来讲 annotation processor 了! 这...

k8s开的kubectl logs路径修改

【YC的迷路青春】 如果不要用预设的路径,例如专案是用tomcat起的,我们不想看tomcat的lo...

大共享时代系列_021_远端桌面软件(远端连线)

虽然不能进行人与人的连结 但我们可以进行装置与装置的连结~(^ω^)人(^ω^) 爲什麽要让你连进我...