前言
你一定听说过一句话:React 中一切皆为组件。
在这之前,我们通过直接写 HTML
描述渲染内容,现在在 React 中,我们通过写 JSX
来描述渲染内容。
基本语法
我们写一个组件
const List = () => (
<ul>
<li>小胖子1</li>
<li>小胖子2</li>
<li>小胖子3</li>
</ul>
);
我们写了一个箭头函数,与以往不同的是,箭头函数返回一段 JSX。现在我们就可以把 List 称作一个 React 组件。
注意:
返回的 JSX 必须由一个标签包裹(React 16 引入了Fragment,此处不再拓展)。例如
const List = () => <div>test</div><div>test</div>
就会报错标签必须闭合。
组件名首字母大写,用于区分 DOM 元素与组件元素。
使用表达式
我们说JSX
看起来像 HTML
,却比 HTML
灵活,归功于可以在 JSX
内插入 JavaScript 表达式(表达式使用 {}
包裹)。
const App = () => {
const color = 'blue';
return (
<div>{color}</div>
);
};
当然不仅是变量,{}
内可以放任何 JavaScript 表达式,例如:
const App = () => {
const color = 'blue';
return (
<div>
<div>{color}</div>
<div>{1 + 1}</div>
<div>{new Date().getTime()}</div>
<div>{(() => 'react')()}</div>
</div>
);
};
元素属性
除了标签的内容可以用表达式,标签的属性同样可以使用表达式,但是有两个例外 —— class 和 for,因为这两个属性均为 JavaScript 的关键词,我们可以这样转换:
class 改为 className
for 改为 htmlFor
例如:
const App = () => {
const color = 'blue';
return (
<div className={color}>hello</div>
);
};
Boolean 属性
一些常用的属性例如 disabled checked 等,我们可以省略值来表示为 true。<input disabled />
就等同于 <input disabled={true} />
使用 ES6 rest
我们可以直接将一个 JavaScript 对象里的属性作为元素的属性合并,使用 ES6 的 rest 特性。
const App = () => {
const props = {
className: 'app',
id: 'app',
'data-root': 'root',
};
return (
<div {...props}>hello</div>
);
};
渲染的 DOM :
最后
我们已经了解了 JSX 的灵活特性,接下来我们将使用 JSX 创建组件并加以使用,了解 React 的强大之处。