React官方文档学习记录(四)- 条件渲染

一点点记录,建议需要学习React的移步官方文档去学习。

在React中,你可以创建一个清晰(distinct)的组件来简要描述你现在需要的东西。然后,你只需要使用你应用中的state来渲染它们。

React中的条件型渲染跟JavaScript中的条件运算符运行方式差不多。好像就是使用JavaScript中的if或者三元运算符创建元素来显示现在的状态,然后让React更新UI来匹配这些修改。

下面这个例子就是根据不同的isLoggedIn进行不同的欢迎。

1

2

3

4

5

6

7

8

9

10

11

12

13
function (props) {

const isLoggedIn = props.isLoggedIn;

if (isLoggedIn) {

return <UserGreeting />;

}

return <GuestGreeting />;

}

ReactDOM.render(

// Try changing to isLoggedIn={true}:

<Greeting isLoggedIn={false} />,

document.getElementById('root')

);

元素变量(element variables)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39
class LoginControl extends React.Component {

constructor(props) {

super(props);

this.handleLoginClick = this.handleLoginClick.bind(this);

this.handleLogoutClick = this.handleLogoutClick.bind(this);

this.state = {isLoggedIn: false};

}

handleLoginClick() {

this.setState({isLoggedIn: true});

}

handleLogoutClick() {

this.setState({isLoggedIn: false});

}

render() {

const isLoggedIn = this.state.isLoggedIn;

let button = null;

if (isLoggedIn) {    

button = <LogoutButton onClick={this.handleLogoutClick} />;

} else {   

button = <LoginButton onClick={this.handleLoginClick} />;

}

return (

<div>

<Greeting isLoggedIn={isLoggedIn} />

{button}

</div>

);

}

}

ReactDOM.render(

<LoginControl />,

document.getElementById('root')

);

如果你觉得上述的代码非常的冗长,React有更短的哦
1.inline if with logical && Operator(这个地方我不会翻译)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
function Mailbox(props) {

const unreadMessages = props.unreadMessages;

return (

<div>

<h1>Hello!</h1>

//就在下面这里

{unreadMessages.length > 0 &&

<h2>

You have {unreadMessages.length} unread messages.

</h2>

}

</div>

);

}

const messages = ['React', 'Re: React', 'Re:Re: React'];

ReactDOM.render(

& 大专栏  React官方文档学习记录(四)- 条件渲染lt;Mailbox unreadMessages={messages} />,

document.getElementById('root')

);

这个的意思就是使用了 true && 表达式,如果是false &&的话就相当于false。

因此当表达式是true的时候,这个紧跟&&的元素就会在输出结果中显示,否则React就忽视并跳过它。

2.这种方式就是使用JavaScript中的三元运算符condition? true : false,下面的例子中我们使用这个来进行条件性地渲染一小块的文本。

1

2

3

4

5

6

7

8
render() {

const isLoggedIn = this.state.isLoggedIn;

return (

<div>

The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.

</div>

);

}

当然你也可以这么复杂地写:

1

2

3

4

5

6

7

8

9

10

11

12
render() {

const isLoggedIn = this.state.isLoggedIn;

return (

<div>

{isLoggedIn ? (

<LogoutButton onClick={this.handleLogoutClick} />

) : (

<LoginButton onClick={this.handleLoginClick} />

)}

</div>

);

}

这一切都是取决于你和你的码友觉得哪种方式更加易读吧,但是当判断表达式非常多的时候,请注意学会拆分组件!!!

不让组件渲染

当你在某些情况下不想让组件渲染的时候,请使用return null这样就可以隐藏它啦

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42
function WarningBanner(props) {

// WarningBanner这个组件渲染与否取决于props.warn的值

if (!props.warn) {

return null;

}

return (

<div className="warning">

Warning!

</div>

);

}

class Page extends React.Component {

constructor(props) {

super(props);

this.state = {showWarning: true}

this.handleToggleClick = this.handleToggleClick.bind(this);

}

handleToggleClick() {

this.setState(prevState => ({

showWarning: !prevState.showWarning

}));

}

render() {

return (

<div>

<WarningBanner warn={this.state.showWarning} />

<button onClick={this.handleToggleClick}>

{this.state.showWarning ? 'Hide' : 'Show'}

</button>

</div>

);

}

}

ReactDOM.render(

<Page />,

document.getElementById('root')

);

当从组件的render()中返回null的时候,是不会影响组件的生命循环方法的。这就意味着componentDidMountcomponentWillUnmount方法仍然是会被调用的哦。

原文地址:https://www.cnblogs.com/dajunjun/p/11699445.html

时间: 2024-10-19 03:12:29

React官方文档学习记录(四)- 条件渲染的相关文章

OpenCV官方文档学习记录(4)

基本图形的绘制,官方文档给了一个实例,绘制下面两幅图形,分别使用了圆,椭圆,矩形,多边形,线等构造. 主要是使我们了解到如何构建这些形状,以及如何使用两种数据类型Point和Scalar分别定义点和颜色: 先放图: 完整代码如下: 1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4 5 #pragma comment( linker, "/subsystem:\

Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion

前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的人,但事实并非如此,例如我.好在闷着头看了一遍,又查资料又敲代码,总算明白了. 其实说穿了一文不值,我们用一个例子来解释: 假定,现有一个app,功能是接收你输入的生日,然后显示你的年龄.看起来app只要用当前日期减去你输入的日期就是年龄,应该很简单对吧?可惜事实不是这样的. 这里面有三个问题: 问题一:我们输入的永远是字符串,字符串需要转成日期格式才能被我们的ap

OpenCV官方文档学习记录(6)

离散傅里叶变换:DFT,文档p165 代码如下: 1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4 5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 6 7 #define NUMBER 20 8 9

OpenCV官方文档学习记录(16)

Canny边缘检测 先不说函数作用,来代码: 1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4 5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 6 7 using namespace std; 8 u

OpenCV官方文档学习记录(11)

制作自己的filter, 主要使用filter2D函数: 先上代码: 1 #include "opencv2/opencv.hpp" 2 #include<iostream> 3 #include<string> 4 5 using namespace std; 6 using namespace cv; 7 8 int main(void) 9 { 10 Mat src,dst; 11 12 Mat kernel; 13 Point anthor; 14 do

OpenCV官方文档学习记录(7)

从今天开始进入官方的图像处理部分. 图像滤波: 主要介绍了四种滤波函数的使用方式 示例代码: 1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4 5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 6 7

OpenCV官方文档学习记录(5)

随机数生成类:RNG以及文字渲染 1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4 5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 6 7 #define NUMBER 20 8 9 using na

OpenCV官方文档学习记录(15)

laplace边缘检测方式 不同于sobel的一阶导数式边缘检测,laplace算子是将图像的横纵都考虑进来的一种检测,主要使用的是二阶偏导数进行离散变换: 因为laplace也是使用分析梯度的方式进行变换,所以实际上调用的是sobel的方法.在上一篇上有体现,就是在两个方向上分别使用sobel计算结果. 代码如下: 1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4 5

OpenCV官方文档学习记录(1)

图像显示并转化为黑白输出到新文件 code: 1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4 5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 6 7 using namespace std; 8 u