前言
在上一节 JSX 基本语法 中,我们都是通过箭头函数返回 JSX 的方式创建组件。
从这一节开始,我们使用另外一种方式:继承 React.Component 类 来创建组件。
class App extends React.Component {render() {const color = 'blue';return (<div>{color}</div>);}}
组件类的组成必须有 render 方法,并且在 render 方法内返回 JSX。
条件渲染
在实际工作场景中,我们不可避免的会遇到不同条件显示不同内容的需求,此时使用条件渲染的方式最适合不过。
if/else
最简单的,我们可以在 render 方法内写 if/else return 不同内容满足需求:
class App extends React.Component {render() {const mode = 'view1';if (mode === 'view1') {return (<div>view1</div>);} else {return (<div>view2</div>);}}}
当然我们不推荐使用这种方式,逻辑复杂时这种方式实在过于臃肿。
三元运算符
上一节我们说过,{} 内可以写任何 JavaScript 表达式,所以我们可以通过三元运算符来优化上边的代码:
class App extends React.Component {render() {const mode = 'view1';return (<div>{mode === 'view1' ? 'view1' : 'view2'}</div>);}}
短路运算符
我们变更一点需求,要求满足 mode === 'view1' 时渲染 view1
如果使用三元运算符:
class App extends React.Component {render() {const mode = 'view1';return (<div>{mode === 'view1'? <div>view1</div>: null}</div>);}}
上面的代码如果使用短路运算符可优化为:
class App extends React.Component {render() {const mode = 'view1';return (<div>{mode === 'view1' && <div>view1</div>}</div>);}}
自执行函数
如果你遇到了多层嵌套的三元运算符,例如:
const mode = 1;return (<div>{ mode === 1? <Component1 />: ( mode === 2? <Component2 />: ( mode === 3? <Component3 />: <Component4 />))}</div>);
那么你已经进入到了嵌套地狱当中,也许你需要使用自执行函数缕清你的代码:
const mode = 1;return (<div>{(() => {switch (mode) {case 1:return <Component1 />;case 2:return <Component2 />;case 3:return <Component3 />;case 4:return <Component4 />;default:return null;}})()}</div>);
虽然这种方式可用,但是我们还是需要反思为什么会出现如此复杂的逻辑判断。
也许我们可以将复杂的逻辑进行拆分,并将拆分后的逻辑写在各自的组件内,最后将各个组件组合起来。
下一节我们探索组件之间的组合嵌套。
实战
我们已经了解了 React.js 基本环境安装以及 JSX 相关内容。从本章开始,我们将从零实现一个 天气预报 app,从中体会 React 的魅力所在。
首先我们使用 create-react-app 工具生成项目。(项目不针对样式着重讲解,可忽略样式相关内容)
打开 App.js ,写入以下代码:
import React from 'react';import './style.css';const App = () => (<div className="RealTime"><div className="temp">-2°</div><div className="weather">晴</div><div className="wind">北风 2级</div><div className="humidity">66%</div></div>);export default App;
我们可以直接通过 import './style.css' 引入样式。
这样我们就实现了一个展示天气信息的组件。

下一节我们将实现更多组件,并且将组件组合。
