07、08 條件渲染、列表渲染

條件渲染

React沒有像v-if、v-show這樣的指令,需要使用JSX表達式組合而成
// 與運算 三目
// 判斷表達式一定是false/null/undefined時才不會被渲染,0、空字符串、NaN會顯示
// 如果render函數返回null,不會進行任何渲染

......state = {showLeft: false// showLeft: undefined, // 與運算中效果同false// showLeft: null, // 與運算中效果同false// showLeft: 0 // 在與運算中會顯示// showLeft: Number(undefined) // 在與運算中會顯示}
......{!this.state.showLeft && <Right />}

在這里插入圖片描述
在這里插入圖片描述

HTML中使用JSX

  • <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
  • <script type="text/babel"> </script>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script><script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script><script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script><title>React 條件渲染</title>
</head><body><div id="app"></div><script type="text/babel">class Left extends React.Component {render() {return (<div>Left</div>)}}class Right extends React.Component {render() {return (<div>Right</div>)}}class Main extends React.Component {state = {showLeft: false// showLeft: undefined, // 與運算中效果同false// showLeft: null, // 與運算中效果同false// showLeft: 0 // 在與運算中會顯示// showLeft: Number(undefined) // 在與運算中會顯示}handleClick() {this.setState({showLeft: !this.state.showLeft})}render() {return (<div><h1>Main</h1><button onClick={this.handleClick.bind(this)}>{this.state.showLeft ? 'turn Right' : 'turn Left'}</button>{// 1. 三目運算// this.state.showLeft ? <Left /> : <Right />}{// 2. 與運算this.state.showLeft && <Left />}{!this.state.showLeft && <Right />}</div>)}}ReactDOM.render(<Main />,document.getElementById('app'))</script></body></html>

列表渲染 JSX → map

table相關warning

JSX中使用table,若未加tbody、thead會告警
在這里插入圖片描述

key相關warning

  • Each child in a list should have a unique “key” prop.(列表中的每個子元素都必需有一個唯一的key屬性值)
  • key是React確定元素是否改變的唯一標識,key必需在兄弟節點中是唯一的
    在這里插入圖片描述

不建議使用index作為key值的情況

  • 建立在列表順序改變、元素增刪的情況下:列表增刪或順序變了,index對應項就會改變
  • 若列表是靜態不可操作的,可以選擇index作為key值
  1. 用數據唯一的id作為key
  2. 動態生成一個靜態id nanoid yarn add nanoid 每次render都會生成不同的id
import { nanoid } from 'nanoid'
class MyTable extends React.Component {state = {table: [{id: 0,name: '漁'},{id: 1,name: '樵'},{id: 2,name: '耕'},{id: 3,name: '讀'},]}render() {return (<div><table border="1"><thead><tr><th>nanoid</th><th>ID</th><th>名字</th></tr></thead><tbody>{this.state.table.map(item => {const key = nanoid()return (<tr key={key}><td>{key}</td><td>{item.id}</td><td>{item.name}</td></tr>)})}</tbody></table></div>)}
}
ReactDOM.render(<MyTable />,document.getElementById('app')
)

key賦值的正確姿勢

  • 注意:React明確規定,key不能作為屬性傳遞給子組件,必須顯示傳遞key值(使用別的屬性名,如sid)
  • 防止開發者在邏輯中對key值進行操作
  • MyBody: key is not a prop. Trying to access it will result inundefinedbeing returned. If you need to access the same value within the child component, you should pass it as a different prop.
    在這里插入圖片描述
import { nanoid } from 'nanoid'
class MyTitle extends React.Component {render() {return (<thead><tr><th>nanoid</th><th>ID</th><th>名字</th></tr></thead>)}
}
class MyBody extends React.Component {render() {// 這里constructor super都省略了const { sid, item } = this.propsreturn (<tr key={sid}><td>{sid}</td><td>{item.id}</td><td>{item.name}</td></tr>)}
}
class MyTable extends React.Component {state = {table: [{id: 0,name: '漁'},{id: 1,name: '樵'},{id: 2,name: '耕'},{id: 3,name: '讀'},]}render() {return (<div><table border="1"><MyTitle /><tbody>{this.state.table.map(item => {const key = nanoid()return (// 分別是傳入的2個props 以及自身組件循環時的key<MyBody sid={key} item={item} key={key} />)})}</tbody></table></div>)}
}
ReactDOM.render(<MyTable />,document.getElementById('app')
)

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250899.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鏈表的翻轉

public ListNode reverseListNode(ListNode node){ ListNode pre null; ListNode now node;//當前節點 while (now !null){ ListNode after now.next; now.next pre; pre now; now after; } …

面向對象命名空間、組合

一 類命名空間與對象、實例的命名空間 創建一個類就會創建一個類的名稱空間&#xff0c;用來存儲類中定義的所有名字&#xff0c;這些名字稱為類的屬性 而類有兩種屬性&#xff1a;靜態屬性和動態屬性 靜態屬性就是直接在類中定義的變量動態屬性就是定義在類中的方法class Pers…

css --- 使用媒體查詢當屏幕寬度小于某個值時,隱藏掉某個類

Bootstrap提供了一個封裝好的類: .hidden-xs: 當屏幕寬度<768px時隱藏 .hidden-sm: 當屏幕768px < 寬度<992px時隱藏 .hidden-md: 當屏幕992px< 寬度<1200px時隱藏 .hidden-lg: 當屏幕寬度>1200px時隱藏 下面使用css3的 媒體查詢來實現: media screen and…

09 受控組件

含義 受控組件&#xff1a;由state來決定表單內部的數據&#xff0c;由表單的事件處理函數來更改state的方式 class App extends React.Component {// 1. state是表單的唯一數據源state {name: }handleChange (e) > {// 2. 控制表單操作并同步statethis.setState({name:…

劍指Offer--青蛙跳臺階引發的一系列問題

題目描述 一只青蛙一次可以跳上1級臺階&#xff0c;也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法&#xff08;先后次序不同算不同的結果&#xff09;。解法一&#xff08;效率最高&#xff09;數學歸納法&#xff1a;public class Solution {public int JumpFloo…

css --- 伸縮布局,讓圖片居中

很明顯,想要星星位于文字的正下方. // html <section id"lz_about" class"hidden-xs hidden-sm"><div class title text-center"><h1><strong>關于我</strong></h1><img src"./imgs/star.jpg" cla…

day9-Python學習筆記(二十)數據庫備份,修改父類的方法

數據庫備份&#xff0c;修改父類的方法 import os,datetimeclass BakDb(object): def __init__(self,ip,username,passwd,port3306,path/tmp/db_bak): self.ip ip self.username username self.passwd passwd self.port port self.path path …

10 非受控組件以及受控與非受控的選擇方案

含義 非受控組件&#xff1a;表單數據不受控與state的&#xff08;未綁定value&#xff09;&#xff0c;使用React ref從DOM節點中獲取表單數據的組件提示refs棄用 class MyForm extends React.Component {constructor(props) {super(props)}submit (e) > {e.preventDef…

wampserver3.0.6 外網 不能訪問

# 開始 今天在服務器上安裝了wampserver3.0.6 然后在我的電腦瀏覽器上面打開服務器ip提示 Forbidden 下面一行小字提示沒有權限訪問"/"目錄 # 解決 打開 httpd-vhost.conf 文件 修改成如下 # Virtual Hosts #<VirtualHost *:80>ServerName localhostServerAlia…

javascript --- 在linux上部署項目

最近對照視頻,用bootstrap jquery 寫了一個純前端頁面.想把它放在服務器上,供遠程使用. 準備服務器和域名 我服務器和域名是在騰訊云上租的,網址: https://cloud.tencent.com/ 注: 域名很便宜,挑個好的哈哈哈… 服務器(阿里云有個學生價…但是我那個學生價的賬號找不到了…)…

【openssl】利用openssl完成X509證書和PFX證書之間的互轉

利用openssl完成X509證書和PFX證書之間的互轉 # OpenSSL的下載與安裝&#xff1a; 1、下載地址&#xff1a; 官方網址—— https://www.openssl.org/source/ OpenSSL for Windows —— http://gnuwin32.sourceforge.net/packages/openssl.htm 2、安裝&#xff1a;此處已OpenSSL…

11 父子組件數據關系與狀態提升

含義 狀態提升&#xff1a;兩個組件&#xff08;無父子關系&#xff09;共享一個數據并且同步數據變化類組件調用&#xff08;實例化&#xff09;的時候&#xff0c;組件內部的狀態是唯一且獨立的組件嵌套與調用&#xff0c;和是類組件&#xff08;render&#xff09;還是函數…

SQL SERVER 一個SQL語句的執行順序

SQL SERVER 一個SQL語句的執行順序 原文:SQL SERVER 一個SQL語句的執行順序一個SQL 語句的執行順序 1、From (告訴程序 來自哪張表 如果是表表達式 依舊是如此順序) 2、Where&#xff08;條件篩選 謂詞篩選 &#xff09; 3、Group by&#xff08;分組&#xff09; 4、Having&…

JS-事件內置對象event

getKeyCode(event)當中的event必須全部小寫&#xff0c;是JS中時間內置對象&#xff0c;可以直接拿來用&#xff0c;event內種對象代表此刻發生的事件 1 <!doctype html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 …

工具分享 --- 分享一個在線制作ico的網站

還不錯… 生成后一般放在imgs的下面. link:favicon tab 導入鏈接http://www.faviconico.org/

laravel遷移文件

laravel遷移文件的命令 Laravel鼓勵敏捷、迭代的開發方式&#xff0c;我們沒指望在第一次就獲得所有正確的。我們對于自己編寫代碼,可以通過遷移文件,不斷的重復去測試.對于工作&#xff0c;我們開發一個完整的項目,是需要我們每個人相互配合,就好比用svn,git版本控制工具來存儲…

12 組合與繼承、CSS Module

組合與繼承 若Container內部有內容&#xff0c;React會在props內部增加children屬性若Container內部有非元素內容&#xff0c;children&#xff1a;非元素內容若Container內部有單個元素內容&#xff0c;children&#xff1a;React元素對象若Container內部有多個元素內容&…

工具分享 --- tinyPNG,大圖片壓縮工具

今天自己的寫的項目跑在了遠程服務器上… 圖片加載的速度讓人難以接受, 于是各種百度找到了一個在線找到了個圖片壓縮的網站 TinyPNG 可以看一下壓縮的效果…真心不錯啊… 網站如下: https://tinypng.com 額…有些大于5M的需要錢,才能壓縮… 用系統畫圖工具…貌似也能壓縮… …

Mysql 忘記管理員密碼更改

對管理員設置密碼第一種方式&#xff1a;#mysqladmin -u root password new-password;#mysqladmin -u root -h localhost password new-password;mysql的選項可以不帶空格&#xff0c;有時候帶空格是錯 第二種方式&#xff1a; set password for rootlocahostPASSWORED(); 第三…

ironic如何支持部署時按需RAID?

ironic如何支持部署時按需RAID&#xff1f; 新浪大神推薦使用element proliant-tools制作deploy image。element proliant-tools會在ipa ramdisk中安裝一個rpm包hpssacli&#xff08;HP的RAID管理工具&#xff09;&#xff0c;和一個python module proliantutils&#xff08;里…