-
Notifications
You must be signed in to change notification settings - Fork 0
/
2018-06-02-react-first-day.html
1323 lines (748 loc) · 64.6 KB
/
2018-06-02-react-first-day.html
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html class="theme-next mist use-motion" lang="zh-Hans">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<meta name="theme-color" content="#222">
<script src="/lib/pace/pace.min.js?v=1.0.2"></script>
<link href="/lib/pace/pace-theme-minimal.min.css?v=1.0.2" rel="stylesheet">
<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link href="/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />
<link href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css" />
<link href="/css/main.css?v=5.1.4" rel="stylesheet" type="text/css" />
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=5.1.4">
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png?v=5.1.4">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png?v=5.1.4">
<link rel="mask-icon" href="/images/logo.svg?v=5.1.4" color="#222">
<meta name="keywords" content="react," />
<link rel="alternate" href="/atom.xml" title="赖同学" type="application/atom+xml" />
<meta name="description" content="react 学习笔记day-01介绍JSX const element = &lt;h1&gt;Hello, world!&lt;/h1&gt; 它称为JSX,是JavaScript的语法的扩展。 选择JSX的理由:React拥抱渲染逻辑与其他UI逻辑固有耦合的事实:事件如何处理,状态如何随事件变化以及数据如何准备显示。通过将标记和逻辑放入单独的文件中,React不再人为地分离技术,">
<meta name="keywords" content="react">
<meta property="og:type" content="article">
<meta property="og:title" content="react-day1">
<meta property="og:url" content="http://laibh.top/2018-06-02-react-first-day.html">
<meta property="og:site_name" content="赖同学">
<meta property="og:description" content="react 学习笔记day-01介绍JSX const element = &lt;h1&gt;Hello, world!&lt;/h1&gt; 它称为JSX,是JavaScript的语法的扩展。 选择JSX的理由:React拥抱渲染逻辑与其他UI逻辑固有耦合的事实:事件如何处理,状态如何随事件变化以及数据如何准备显示。通过将标记和逻辑放入单独的文件中,React不再人为地分离技术,">
<meta property="og:locale" content="zh-Hans">
<meta property="og:updated_time" content="2022-03-04T10:00:38.452Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="react-day1">
<meta name="twitter:description" content="react 学习笔记day-01介绍JSX const element = &lt;h1&gt;Hello, world!&lt;/h1&gt; 它称为JSX,是JavaScript的语法的扩展。 选择JSX的理由:React拥抱渲染逻辑与其他UI逻辑固有耦合的事实:事件如何处理,状态如何随事件变化以及数据如何准备显示。通过将标记和逻辑放入单独的文件中,React不再人为地分离技术,">
<script type="text/javascript" id="hexo.configurations">
var NexT = window.NexT || {};
var CONFIG = {
root: '/',
scheme: 'Mist',
version: '5.1.4',
sidebar: {"position":"left","display":"post","offset":12,"b2t":false,"scrollpercent":true,"onmobile":false},
fancybox: true,
tabs: true,
motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
duoshuo: {
userId: '0',
author: '博主'
},
algolia: {
applicationID: '1YNH8Y3MP9',
apiKey: '61c189facf700193dfcbb902369ce227',
indexName: 'MyBlog',
hits: {"per_page":10},
labels: {"input_placeholder":"想要找些什么呢","hits_empty":"${query} 没有被找到,再试试","hits_stats":"在 ${time} ms 查找了${hits}个结果"}
}
};
</script>
<link rel="canonical" href="http://laibh.top/2018-06-02-react-first-day.html"/>
<title>react-day1 | 赖同学</title>
</head>
<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">
<div class="container sidebar-position-left page-post-detail">
<div class="headband"></div>
<header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
<div class="header-inner"><div class="site-brand-wrapper">
<div class="site-meta ">
<div class="custom-logo-site-title">
<a href="/" class="brand" rel="start">
<span class="logo-line-before"><i></i></span>
<span class="site-title">赖同学</span>
<span class="logo-line-after"><i></i></span>
</a>
</div>
<h1 class="site-subtitle" itemprop="description"></h1>
</div>
<div class="site-nav-toggle">
<button>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
</button>
</div>
</div>
<nav class="site-nav">
<ul id="menu" class="menu">
<li class="menu-item menu-item-home">
<a href="/" rel="section">
<i class="menu-item-icon fa fa-fw fa-home"></i> <br />
首页
</a>
</li>
<li class="menu-item menu-item-tags">
<a href="/tags/" rel="section">
<i class="menu-item-icon fa fa-fw fa-tags"></i> <br />
标签
</a>
</li>
<li class="menu-item menu-item-categories">
<a href="/categories/" rel="section">
<i class="menu-item-icon fa fa-fw fa-th"></i> <br />
分类
</a>
</li>
<li class="menu-item menu-item-archives">
<a href="/archives/" rel="section">
<i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
归档
</a>
</li>
<li class="menu-item menu-item-sitemap">
<a href="/sitemap.xml" rel="section">
<i class="menu-item-icon fa fa-fw fa-sitemap"></i> <br />
站点地图
</a>
</li>
<li class="menu-item menu-item-guestbook">
<a href="/guestbook" rel="section">
<i class="menu-item-icon fa fa-fw fa-comment"></i> <br />
留言
</a>
</li>
<li class="menu-item menu-item-search">
<a href="javascript:;" class="popup-trigger">
<i class="menu-item-icon fa fa-search fa-fw"></i> <br />
搜索
</a>
</li>
</ul>
<div class="site-search">
<div class="algolia-popup popup search-popup">
<div class="algolia-search">
<div class="algolia-search-input-icon">
<i class="fa fa-search"></i>
</div>
<div class="algolia-search-input" id="algolia-search-input"></div>
</div>
<div class="algolia-results">
<div id="algolia-stats"></div>
<div id="algolia-hits"></div>
<div id="algolia-pagination" class="algolia-pagination"></div>
</div>
<span class="popup-btn-close">
<i class="fa fa-times-circle"></i>
</span>
</div>
</div>
</nav>
</div>
</header>
<main id="main" class="main">
<div class="main-inner">
<div class="content-wrap">
<div id="content" class="content">
<div id="posts" class="posts-expand">
<article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
<div class="post-block">
<link itemprop="mainEntityOfPage" href="http://laibh.top/2018-06-02-react-first-day.html">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="name" content="赖彬鸿">
<meta itemprop="description" content="">
<meta itemprop="image" content="/images/myPhoto.jpg">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="赖同学">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">react-day1</h2>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建于" itemprop="dateCreated datePublished" datetime="2018-06-02T15:00:45+08:00">
2018-06-02
</time>
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-calendar-check-o"></i>
</span>
<span class="post-meta-item-text">更新于:</span>
<time title="更新于" itemprop="dateModified" datetime="2022-03-04T18:00:38+08:00">
2022-03-04
</time>
</span>
<span class="post-category" >
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/react相关/" itemprop="url" rel="index">
<span itemprop="name">react相关</span>
</a>
</span>
</span>
<span id="/2018-06-02-react-first-day.html" class="leancloud_visitors" data-flag-title="react-day1">
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-eye"></i>
</span>
<span class="post-meta-item-text">阅读次数:</span>
<span class="leancloud-visitors-count"></span>
</span>
<div class="post-wordcount">
<span class="post-meta-item-icon">
<i class="fa fa-file-word-o"></i>
</span>
<span class="post-meta-item-text">字数统计:</span>
<span title="字数统计">
2,106
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<h1 id="react-学习笔记day-01"><a href="#react-学习笔记day-01" class="headerlink" title="react 学习笔记day-01"></a>react 学习笔记day-01</h1><h2 id="介绍JSX"><a href="#介绍JSX" class="headerlink" title="介绍JSX "></a>介绍JSX </h2><blockquote>
<p><code>const element = <h1>Hello, world!</h1></code> </p>
</blockquote>
<p>它称为JSX,是JavaScript的语法的扩展。 </p>
<h3 id="选择JSX的理由:"><a href="#选择JSX的理由:" class="headerlink" title="选择JSX的理由:"></a>选择JSX的理由:</h3><p>React拥抱渲染逻辑与其他UI逻辑固有耦合的事实:事件如何处理,状态如何随事件变化以及数据如何准备显示。<br>通过将标记和逻辑放入单独的文件中,React不再人为地分离技术,而是将问题与称为“组件”的松散耦合单元分隔开来。 </p>
<p>在JSX中嵌入表达式 </p>
<p>下面例子中,声明一个变量<code>name</code>,然后在JSX中使用它包装在大括号中: </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">const name = 'Josn Lai';</span><br><span class="line">const elenment = <h1>Hello , {name}</h1>;</span><br><span class="line"></span><br><span class="line">ReactDOM.render(</span><br><span class="line"> element,</span><br><span class="line"> document.getElementById('root')</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<p>可以在JSX的大括号中(<code>{}</code>)放入任何有效的JavaScript表达式。<br>下例中,将调用JavaScript函数的结果嵌入到<code>formatName(user)</code>到<code><h1></code>元素中 </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">function formatName(user){</span><br><span class="line"> return user.firstName + ' ' + user.lastName;</span><br><span class="line">}</span><br><span class="line">const user = {</span><br><span class="line"> firstName: 'lai',</span><br><span class="line"> lastName: 'binghong'</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line">const element = (</span><br><span class="line"> <h1></span><br><span class="line"> Hello,{formatName(user)}!</span><br><span class="line"> </h1></span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">ReactDOM.render(</span><br><span class="line"> elememt,</span><br><span class="line"> document.getElementById('root');</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<h3 id="JSX也是一个表达式"><a href="#JSX也是一个表达式" class="headerlink" title="JSX也是一个表达式"></a>JSX也是一个表达式</h3><p>编译之后,JSX表达式变成常规的JavaScript函数调用并评估为JavaScript对象。这意味着可以在if语句和for循环中是用JSX将其分配给变量,将其作为参数接受,并从函数中返回: </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">function getGreeting(user){</span><br><span class="line"> if(user){</span><br><span class="line"> return <h1>Hello,{formatName(user)}!</h1></span><br><span class="line"> }</span><br><span class="line"> return <h1>Hello, Stranger.</h1></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>使用JSX指定属性 </p>
<p>可以使用引号将字符串文字指定为属性 </p>
<blockquote>
<p><code>const element = <div tabIndex = “0”></div></code>; </p>
</blockquote>
<p>也可以使用大括号将javascript表达式嵌入到属性中 </p>
<blockquote>
<p><code>const element = <img src={user.avatarUrl}></img></code>; </p>
</blockquote>
<p>在属性中嵌入javascript表达式时,请勿将大括号括起来,应该使用引号(用于字符串值)或大括号(用于表达式),但是不可以同时使用同一个属性<br><strong>JSX的命名一般用camelCase,驼峰式命名。class => className ,tabindex => tabIndex.</strong></p>
<p>用JSX可以包含子项,单标签用闭合 </p>
<blockquote>
<p><code>const element = <img src = {user.avatarUrl}/>;</code></p>
</blockquote>
<p>JSX标签可能包含子项: </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">const element = (</span><br><span class="line"> <div></span><br><span class="line"> <h1>Hello!</h1></span><br><span class="line"> <h2>xxx</h2></span><br><span class="line"> <div></span><br><span class="line"> ccc</span><br><span class="line"> </div></span><br><span class="line"> </div></span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<h3 id="JSX防止注入攻击"><a href="#JSX防止注入攻击" class="headerlink" title="JSX防止注入攻击"></a>JSX防止注入攻击</h3><p>默认情况下,react DOM 在渲染之前转义嵌入在JSX中的任何值,因此它确保不会注入任何未明确写入应用程序的内容,在呈现前,所有内容都会转换为字符串,有助于防止XSS攻击</p>
<h3 id="JSX表示对象"><a href="#JSX表示对象" class="headerlink" title="JSX表示对象"></a>JSX表示对象</h3><p>Babel将JSX编译为 <code>React.createElement()</code>调用。<br>下方两个例子是相同的:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">const element = (</span><br><span class="line"> <h1 className = "show"></span><br><span class="line"> Hello !</span><br><span class="line"> </h1></span><br><span class="line">);</span><br><span class="line"> </span><br><span class="line">const element = React.createElement(</span><br><span class="line"> 'h1',</span><br><span class="line"> {className: 'show'},</span><br><span class="line"> 'Hello!'</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<p><code>React.createElement()</code>执行一些检查以帮助编写无措代码,但本质上它会创建一个如下对象:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">const element = {</span><br><span class="line"> type: 'h1',</span><br><span class="line"> props: {</span><br><span class="line"> className :'show',</span><br><span class="line"> children: 'Hello!'</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<h2 id="渲染元素"><a href="#渲染元素" class="headerlink" title="渲染元素"></a>渲染元素</h2><p>元素时React 应用程序的最小构建块<br>一个元素描述了你想在屏幕上看到的内容<br>与浏览器DOM元素不同,React元素时普通元素,创建起来很便宜,React DOM负责更新DOM以匹配React元素 </p>
<h3 id="将元素渲染到DOM中"><a href="#将元素渲染到DOM中" class="headerlink" title="将元素渲染到DOM中"></a>将元素渲染到DOM中</h3><p>假设div存在于html某个文件中的某个地方</p>
<blockquote>
<p><code><div id="root"></div></code> </p>
</blockquote>
<p>我们称之为“根”DOM节点,因为它内容部的所有内容都将由React DOM管理<br>仅使用React 构建的应用程序通常具有单个根DOM节点,如果将React集成到现有的应用程序中,则可以根据需要拥有尽可能多的独立根DOM节点。<br>要将React元素渲染到根DOM节点中,请将两者传递给<code>ReactDOM.render()</code>; </p>
<blockquote>
<p><code>const element = <h1>Hello,world</h1>;</code><br><code>ReactDOM.render(element,documentById('root'));</code></p>
</blockquote>
<p>更新呈现的元素<br>React元素时不可变的,一旦创建了一个元素,就不能更改其子元素或者属性。<br>更新Ui的唯一方法是创建一个新元素并将其传递给<code>ReactDOM.reader()</code></p>
<p>时钟例子 </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">function tick(){</span><br><span class="line"> const element = (</span><br><span class="line"> <div></span><br><span class="line"> <h1>1</h1></span><br><span class="line"> <h1>2</h1></span><br><span class="line"> </div></span><br><span class="line"> );</span><br><span class="line"> ReactDOM.render(element,document.getElementById('root'));</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">setInterval(tick, 1000);</span><br></pre></td></tr></table></figure>
<h3 id="组件和道具-props"><a href="#组件和道具-props" class="headerlink" title="组件和道具(props)"></a>组件和道具(props)</h3><p>组件是讲用户界面独立分开,可重复使用的部分,并且可独立思考每一部分</p>
<h3 id="功能和类组件"><a href="#功能和类组件" class="headerlink" title="功能和类组件"></a>功能和类组件</h3><p>定义组件的最简单方法是编写一个javascript函数 </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">function Welcome(x){</span><br><span class="line"> return <h1>你好,{x.name}</h1>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>上面的javascript函数一个有效的React组件,因为它接受一个包含数据的‘x’(代表属性)对象参数并返回一个React元素,我们称这些组件为‘功能性’,因为它们实际上是JavaScript功能 </p>
<p>也可以使用ES6类来定义组件: </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">class Welcome extends React.Compoent{</span><br><span class="line"> render(){</span><br><span class="line"> return <h1>hello, {this.x.name}</h1></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>渲染组件</p>
<p>React元素可以表示DOM标签</p>
<blockquote>
<p><code>const element = <div/>;</code></p>
</blockquote>
<p>也可以表示用户定义的组件</p>
<blockquote>
<p><code>const element =<Welcome name="Lbh">;</code></p>
</blockquote>
<p>当React查看表示用户定义组件的元素时,它会将JSX属性作为单个对象传递给此组件,我们称这个组件为道具 </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">function Welcome(props){</span><br><span class="line"> return <h1>hello!{props.name}</h1>;</span><br><span class="line"> }</span><br><span class="line"> const element = <Welcome name="Lbh"/>;</span><br><span class="line"> ReactDOM.render(</span><br><span class="line"> element,</span><br><span class="line"> documemt.getElementById('root')</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<p><strong>注意:始终使用大写字母开始组件名称。</strong></p>
<p>构成组件</p>
<p>组件可以在其输出中引用其他组件,一个按钮、一个窗体、一个对话框、一个屏幕,在React应用程序中,所有的这些通常都表示为组件<br>例如:创建一个App呈现Welcome多次的组件 </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">function Welcome(x){</span><br><span class="line"> return <h1>hello! {x.name}</h1>;</span><br><span class="line">}</span><br><span class="line">function App(){</span><br><span class="line"> return (</span><br><span class="line"> <div></span><br><span class="line"> <Welcome name ="1"/></span><br><span class="line"> <Welcome name ="2"/></span><br><span class="line"> <Welcome name ="3"/></span><br><span class="line"> </div></span><br><span class="line"> );</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">ReactDOM.render(</span><br><span class="line"> <App/>,</span><br><span class="line"> document.getElementById('root')</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<h3 id="提取组件"><a href="#提取组件" class="headerlink" title="提取组件"></a>提取组件</h3><p>不要害怕将组件分解成更小的组件</p>
<p>道具是只读的<br>无论将一个组件声明为一个函数还是一个类,它都不能修改它自己的道具。 </p>
<h2 id="状态和生命周期"><a href="#状态和生命周期" class="headerlink" title="状态和生命周期"></a>状态和生命周期</h2><p>更新UI的方法:使用它<code>ReactDOM.render()</code>改变呈现的输出: \</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">function tick(){</span><br><span class="line"> const element = (</span><br><span class="line"> <div></span><br><span class="line"> <h1>1</h1></span><br><span class="line"> <h2>It is {new Date().toLocaleTimeString()}.</h2></span><br><span class="line"> </div></span><br><span class="line"> );</span><br><span class="line"> ReactDOM.render(</span><br><span class="line"> element,</span><br><span class="line"> document.getElementById('root')</span><br><span class="line"> );</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">setInterval(tick,1000);</span><br></pre></td></tr></table></figure>
<p>封装时钟: </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">function Clock(props){</span><br><span class="line"> return(</span><br><span class="line"> <div></span><br><span class="line"> <h1>1</h1></span><br><span class="line"> <h2>It is {props.date.toLocaleTimeString()}</h2></span><br><span class="line"> </div></span><br><span class="line"> );</span><br><span class="line"> </span><br><span class="line"> function tick(){</span><br><span class="line"> ReactDOM.render(</span><br><span class="line"> <Clock date={new Date()}/>,</span><br><span class="line"> document.getElementById('root')</span><br><span class="line"> );</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">setInterval(tick,1000);</span><br></pre></td></tr></table></figure>
<p>给组件添加“状态”,状态类似于道具,是私人的并且是完全由组件控制的。 </p>
<h3 id="将函数转换为类"><a href="#将函数转换为类" class="headerlink" title="将函数转换为类"></a>将函数转换为类</h3><p>1.创建一个扩展名为ES6的类,名称相同的React.Component<br>2.为它添加一个空的方法render()<br>3.将函数的主体移动到render方法中<br>4.更换props用this.props的render身体<br>5.删除多余的空函数声明 </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">class Clock extends React.Component{</span><br><span class="line"> render(){</span><br><span class="line"> return(</span><br><span class="line"> <div></span><br><span class="line"> <h1>1</h1></span><br><span class="line"> <h2>It is {this.props.date.toLocaleTimeString()}.</h2></span><br><span class="line"> </div></span><br><span class="line"> )</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>将本地状态添加到类 </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">class Clock extends React.Component{</span><br><span class="line"> constuctor(props){</span><br><span class="line"> super(props);</span><br><span class="line"> this.state = {date: new Date()};</span><br><span class="line"> }</span><br><span class="line"> render(){</span><br><span class="line"> return(</span><br><span class="line"> <div></span><br><span class="line"> <h1>2</h1></span><br><span class="line"> <h2> It is {this.state.date.toLocaleTimeString()}.</h2></span><br><span class="line"> </div></span><br><span class="line"> );</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">ReactDOM.render(</span><br><span class="line"><Clock />,</span><br><span class="line">document.getElementById('root')</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<p>接下来设置计时器每秒更新一次</p>
<h3 id="将生命周期方法添加到类中"><a href="#将生命周期方法添加到类中" class="headerlink" title="将生命周期方法添加到类中"></a>将生命周期方法添加到类中</h3><p>一个组件完整的生命周期(<code>lifecycle hooks</code>)包括实例化阶段、活动阶段、销毁阶段,每个阶段又由相应的方法管理<br><code>mounting</code> :表示正在挂载虚拟DOM到真实DOM<br><code>updating</code> :表示正被重新渲染<br><code>unmounting</code>:表示正在将虚拟DOM移除真实DOM</p>
<p>每个过程提供了两个函数</p>
<p><code>componentWillMount()</code><br><code>componentDidMount()</code><br><code>componentWillUpdate(object nextProps,object nextState)</code><br><code>componentDidUpdate(object nextProps,object nextState)</code><br><code>componentWillUnmount()</code> </p>
<p><code>componentDidMount()</code> 在组件输出呈现给DOM后,该钩子运行,是设置定时器的好地方 </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">componentDidMount(){</span><br><span class="line"> this.timerID = setInterval(</span><br><span class="line"> () => this.tick(),1000</span><br><span class="line"> );</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">compoentWillUnmount(){</span><br><span class="line"> clearInterval(this.timerID);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>最终: </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line">class Clock extends React.Component{</span><br><span class="line"> constuctor(props){</span><br><span class="line"> super(props);</span><br><span class="line"> this.state = {date: new Date()};</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> componentDidMount(){</span><br><span class="line"> this.timerID = setInterval(</span><br><span class="line"> () => this.tick(),1000</span><br><span class="line"> );</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> compoentWillUnmount(){</span><br><span class="line"> clearInterval(this.timerID);</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> tick(){</span><br><span class="line"> this.setState({</span><br><span class="line"> date:new Date()</span><br><span class="line"> });</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> render(){</span><br><span class="line"> return(</span><br><span class="line"> <div></span><br><span class="line"> <h1>2</h1></span><br><span class="line"> <h2> It is {this.state.date.toLocaleTimeString()}.</h2></span><br><span class="line"> </div></span><br><span class="line"> );</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">ReactDOM.render(</span><br><span class="line"> <Clock />,</span><br><span class="line"> document.getElementById('root')</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<h3 id="正确使用状态(State)"><a href="#正确使用状态(State)" class="headerlink" title="正确使用状态(State)"></a>正确使用状态(State)</h3><p>setState()来改变状态,状态的更新可能是异步的</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">this.setState(function(prevState,props){</span><br><span class="line"> return{</span><br><span class="line"> counter:pervState.counter + props.increment</span><br><span class="line"> };</span><br><span class="line">});</span><br></pre></td></tr></table></figure>
<p>参考链接:<a href="https://react.docschina.org/docs/hello-world.html">https://react.docschina.org/docs/hello-world.html</a></p>
</div>
<div>
<ul class="post-copyright">
<li class="post-copyright-author">
<strong>本文作者:</strong>
赖彬鸿
</li>
<li class="post-copyright-link">
<strong>本文链接:</strong>
<a href="http://laibh.top/2018-06-02-react-first-day.html" title="react-day1">http://laibh.top/2018-06-02-react-first-day.html</a>
</li>
<li class="post-copyright-license">
<strong>版权声明: </strong>
本博客所有文章除特别声明外,均采用 <a href="https://creativecommons.org/licenses/by-nc-sa/3.0/" rel="external nofollow" target="_blank">CC BY-NC-SA 3.0</a> 许可协议。转载请注明出处!
</li>
</ul>
</div>
<footer class="post-footer">
<div class="post-tags">
<a href="/tags/react/" <i class="fa fa-tag"></i> react</a>
</div>
<div class="post-nav">
<div class="post-nav-next post-nav-item">
<a href="/2018-05-16-originjsAjax.html" rel="next" title="原生js实现Ajax">
<i class="fa fa-chevron-left"></i> 原生js实现Ajax
</a>
</div>
<span class="post-nav-divider"></span>
<div class="post-nav-prev post-nav-item">
<a href="/2018-06-04-react-second-day.html" rel="prev" title="react-day2">
react-day2 <i class="fa fa-chevron-right"></i>
</a>
</div>
</div>
</footer>
</div>
</article>
<div class="post-spread">
<script>
window._bd_share_config = {
"common": {
"bdText": "",
"bdMini": "1",
"bdMiniList": false,
"bdPic": ""
},
"image": {
"viewList": ["tsina", "douban", "sqq", "qzone", "weixin", "twi", "fbook"],
"viewText": "分享到:",
"viewSize": "16"
},
"slide": {
"bdImg": "5",
"bdPos": "left",
"bdTop": "100"
}
}
</script>
<script>
with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='/static/api/js/share.js?v=89860593.js?'+~(-new Date()/36e5)];;
</script>
</div>
</div>
</div>
<div class="comments" id="comments">
<div id="lv-container" data-id="city" data-uid="MTAyMC8zOTcwMy8xNjIzMA"></div>
</div>
</div>
<div class="sidebar-toggle">
<div class="sidebar-toggle-line-wrap">
<span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
<span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
<span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
</div>
</div>
<aside id="sidebar" class="sidebar">
<div class="sidebar-inner">
<ul class="sidebar-nav motion-element">
<li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap">
文章目录
</li>
<li class="sidebar-nav-overview" data-target="site-overview-wrap">
站点概览
</li>
</ul>
<section class="site-overview-wrap sidebar-panel">
<div class="site-overview">
<div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
<img class="site-author-image" itemprop="image"
src="/images/myPhoto.jpg"
alt="赖彬鸿" />
<p class="site-author-name" itemprop="name">赖彬鸿</p>
<p class="site-description motion-element" itemprop="description"></p>
</div>
<nav class="site-state motion-element">
<div class="site-state-item site-state-posts">
<a href="/archives/">
<span class="site-state-item-count">135</span>
<span class="site-state-item-name">日志</span>
</a>
</div>
<div class="site-state-item site-state-categories">
<a href="/categories/index.html">
<span class="site-state-item-count">32</span>
<span class="site-state-item-name">分类</span>
</a>
</div>
<div class="site-state-item site-state-tags">
<a href="/tags/index.html">
<span class="site-state-item-count">40</span>
<span class="site-state-item-name">标签</span>
</a>
</div>
</nav>
<div class="feed-link motion-element">
<a href="/atom.xml" rel="alternate">
<i class="fa fa-rss"></i>
RSS
</a>
</div>
<div class="links-of-author motion-element">
<span class="links-of-author-item">
<a href="https://github.com/LbhFront-end" target="_blank" title="GitHub">
<i class="fa fa-fw fa-github"></i>GitHub</a>
</span>
<span class="links-of-author-item">
<a href="https://www.cnblogs.com/lbh2018/" target="_blank" title="博客园">
<i class="fa fa-fw fa-globe"></i>博客园</a>
</span>
<span class="links-of-author-item">
<a href="https://yq.aliyun.com/users/1802204154913774?spm=a2c4e.11153940.blogcont662526.4.6c0a34f6E2lR5o" target="_blank" title="云栖">
<i class="fa fa-fw fa-globe"></i>云栖</a>
</span>
<span class="links-of-author-item">
<a href="mailto:544289495@qq.com" target="_blank" title="E-Mail">
<i class="fa fa-fw fa-envelope"></i>E-Mail</a>
</span>
<span class="links-of-author-item">
<a href="tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=544289495&website=www.oicqzone.com" target="_blank" title="QQ">
<i class="fa fa-fw fa-qq"></i>QQ</a>
</span>
<span class="links-of-author-item">
<a href="https://www.google.com.hk/search?safe=strict&source=hp&ei=JtLCXIriJ8G4-gS_-4qABQ&q=site%3Alaibh.top&btnK=Google+%E6%90%9C%E7%B4%A2&oq=site%3Alaibh.top&gs_l=psy-ab.3...1158.6834..7051...5.0..1.246.3720.2-17......0....1..gws-wiz.....0..0j0i10.rJMUHvdrbds" target="_blank" title="Google">
<i class="fa fa-fw fa-google"></i>Google</a>
</span>
</div>
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=90 src="//music.163.com/outchain/player?type=0&id=2353471182&auto=0&height=90"></iframe>
<div class="links-of-blogroll motion-element links-of-blogroll-inline">
<div class="links-of-blogroll-title">
<i class="fa fa-fw fa-link"></i>
友情链接
</div>
<ul class="links-of-blogroll-list">
<li class="links-of-blogroll-item">
<a href="http://www.chjtx.com/JRoll/" title="醉萝卜" target="_blank">醉萝卜</a>
</li>
<li class="links-of-blogroll-item">
<a href="http://hzd.plus/" title="Zhendong" target="_blank">Zhendong</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://www.cnblogs.com/cnyball" title="cnyballk" target="_blank">cnyballk</a>
</li>
<li class="links-of-blogroll-item">
<a href="http://johnzz.top/" title="John" target="_blank">John</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://xiaojun1994.top/" title="xiaojun1994" target="_blank">xiaojun1994</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://me.ursb.me" title="Airing" target="_blank">Airing</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://www.iyouhun.com" title="游魂" target="_blank">游魂</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://icoty.github.io/" title="荒野之萍" target="_blank">荒野之萍</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://im-one.github.io/" title="imOne" target="_blank">imOne</a>
</li>
<li class="links-of-blogroll-item">
<a href="http://blog.hourxu.com/" title="Ambre" target="_blank">Ambre</a>
</li>
<li class="links-of-blogroll-item">
<a href="http://www.huyujs.com" title="胡雨" target="_blank">胡雨</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://www.andou.live" title="安逗" target="_blank">安逗</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://www.jianshu.com/u/701a8bbf4f7e" title="陈健斌" target="_blank">陈健斌</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://itobys.github.io/" title="汤姆Tom酱" target="_blank">汤姆Tom酱</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://breeze2.github.io/blog/" title="林毅锋" target="_blank">林毅锋</a>
</li>
<li class="links-of-blogroll-item">
<a href="http://www.qzroc.com/" title="大鹏博客" target="_blank">大鹏博客</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://lyreal666.com/" title="余腾靖的博客" target="_blank">余腾靖的博客</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://buzuosheng.com/" title="不作声" target="_blank">不作声</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://www.baidu.com/s?ie=UTF-8&wd=site%3Alaibh.top" title="百度" target="_blank">百度</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://www.google.com.hk/search?safe=strict&source=hp&ei=zXdWXfemLJbO0PEP8qyXyA0&q=site%3Alaibh.top&oq=site%3Alaibh.top&gs_l=psy-ab.3...580.8501..8767...0.0..0.397.934.2-1j2......0....2j1..gws-wiz.QESXfWGadT0&ved=0ahUKEwi3wbusiofkAhUWJzQIHXLWBdkQ4dUDCAU&uact=5" title="谷歌" target="_blank">谷歌</a>
</li>
</ul>
</div>
</div>
</section>
<!--noindex-->
<section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
<div class="post-toc">
<div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#react-学习笔记day-01"><span class="nav-number">1.</span> <span class="nav-text">react 学习笔记day-01</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#介绍JSX"><span class="nav-number">1.1.</span> <span class="nav-text">介绍JSX </span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#选择JSX的理由:"><span class="nav-number">1.1.1.</span> <span class="nav-text">选择JSX的理由:</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#JSX也是一个表达式"><span class="nav-number">1.1.2.</span> <span class="nav-text">JSX也是一个表达式</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#JSX防止注入攻击"><span class="nav-number">1.1.3.</span> <span class="nav-text">JSX防止注入攻击</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#JSX表示对象"><span class="nav-number">1.1.4.</span> <span class="nav-text">JSX表示对象</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#渲染元素"><span class="nav-number">1.2.</span> <span class="nav-text">渲染元素</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#将元素渲染到DOM中"><span class="nav-number">1.2.1.</span> <span class="nav-text">将元素渲染到DOM中</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#组件和道具-props"><span class="nav-number">1.2.2.</span> <span class="nav-text">组件和道具(props)</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#功能和类组件"><span class="nav-number">1.2.3.</span> <span class="nav-text">功能和类组件</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#提取组件"><span class="nav-number">1.2.4.</span> <span class="nav-text">提取组件</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#状态和生命周期"><span class="nav-number">1.3.</span> <span class="nav-text">状态和生命周期</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#将函数转换为类"><span class="nav-number">1.3.1.</span> <span class="nav-text">将函数转换为类</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#将生命周期方法添加到类中"><span class="nav-number">1.3.2.</span> <span class="nav-text">将生命周期方法添加到类中</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#正确使用状态(State)"><span class="nav-number">1.3.3.</span> <span class="nav-text">正确使用状态(State)</span></a></li></ol></li></ol></li></ol></div>
</div>
</section>
<!--/noindex-->
</div>
</aside>
</div>
</main>
<footer id="footer" class="footer">
<div class="footer-inner">
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<div class="copyright">© 2018 — <span itemprop="copyrightYear">2022</span>
<span class="with-love">
<i class="fa fa-heart throb" style="color: #d43f57;"></i>
</span>
<span class="author" itemprop="copyrightHolder">赖彬鸿</span>
</div>
<script src='https://unpkg.com/mermaid@7.1.2/dist/mermaid.min.js'></script>
<script>
if (window.mermaid) {
mermaid.initialize("");
}
</script>
<!--
<div class="powered-by">由 <a class="theme-link" target="_blank" href="https://hexo.io">Hexo</a> 强力驱动</div>
<span class="post-meta-divider">|</span>
<div class="theme-info">主题 — <a class="theme-link" target="_blank" href="https://github.com/iissnan/hexo-theme-next">NexT.Mist</a> v5.1.4</div>
-->
<div>
<span id="busuanzi_container_site_pv" title="访问量">
<i class="fa fa fa-eye"></i> <span id="busuanzi_value_site_pv"></span>
</span>
<span id="busuanzi_container_site_uv" title="访问人数">
<i class="fa fa-user"></i> <span id="busuanzi_value_site_uv"></span>
</span>
<span class="post-count" title="博客总字数"><i class="fa fa-pagelines" aria-hidden="true"></i>745.9k</span>
</div>
<i class="fa fa-shield" aria-hidden="true" title="本站安全运行时间"></i> <span id="timeDate">载入天数...</span><span id="times">载入时分秒...</span>
<script>
var now = new Date();
function createtime() {
var grt= new Date("01/29/2018 09:47:04");//此处修改你的建站时间或者网站上线时间
now.setTime(now.getTime()+250);
days = (now - grt ) / 1000 / 60 / 60 / 24; dnum = Math.floor(days);
hours = (now - grt ) / 1000 / 60 / 60 - (24 * dnum); hnum = Math.floor(hours);
if(String(hnum).length ==1 ){hnum = "0" + hnum;} minutes = (now - grt ) / 1000 /60 - (24 * 60 * dnum) - (60 * hnum);
mnum = Math.floor(minutes); if(String(mnum).length ==1 ){mnum = "0" + mnum;}
seconds = (now - grt ) / 1000 - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum);
snum = Math.round(seconds);
if(String(snum).length ==1 ){snum = "0" + snum;}
document.getElementById("timeDate").innerHTML = dnum+" 天 ";
document.getElementById("times").innerHTML = hnum + " 小时 " + mnum + " 分 " + snum + " 秒";
}
setInterval("createtime()",250);
</script>
</div>
</footer>
<div class="back-to-top">
<i class="fa fa-arrow-up"></i>