React學習筆記-條件渲染|javascript|運算符|react|render_網易訂閱

2021-01-10 網易

  
在 React 中,你可以創建不同的組件來封裝各種你需要的行為。然後還可以根據應用的狀態變化只渲染其中的一部分。
React 中的條件渲染和 JavaScript 中的一致,使用 JavaScript 操作符 if 或條件運算符來創建表示當前狀態的元素,然後讓 React 根據它們來更新 UI。
先來看兩個組件:

  React 是一個用於構建用戶界面的 JAVASCRIPT 庫。React 主要用於構建UI,很多人認為 React 是 MVC 中的 V(視圖)。React 起源於 Facebook 的內部項目,用來架設 Instagram 的網站,並於 2013 年 5 月開源。React 擁有較高的性能,代碼邏輯非常簡單,越來越多的人已開始關注和使用它。

  

  function UserGreeting(props) {
return ;
}
function GuestGreeting(props) {
return ;
}

  歡迎回來!

  請先註冊。

  我們將創建一個 Greeting 組件,它會根據用戶是否登錄來顯示其中之一:

  React 實例

  function Greeting(props) {
const isLoggedIn = props.isLoggedIn;
if (isLoggedIn) {
return

  ; } return

  ;} ReactDOM.render( // 嘗試修改 isLoggedIn={true}:

  , document.getElementById('example'));

  元素變量

  你可以使用變量來儲存元素。它可以幫助你有條件的渲染組件的一部分,而輸出的其他部分不會更改。
在下面的例子中,我們將要創建一個名為 LoginControl 的有狀態的組件。
它會根據當前的狀態來渲染

  或

  ,它也將渲染前面例子中的

  React 實例

  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 =

  ; } else { button =

  ; } return ( ); }} ReactDOM.render(

  {button}

  , document.getElementById('example'));

  與運算符 &&

  你可以通過用花括號包裹代碼在 JSX 中嵌入任何表達式 ,也包括 JavaScript 的邏輯與 &&,它可以方便地條件渲染一個元素。

  React 實例

  function Mailbox(props) {
const unreadMessages = props.unreadMessages;
return (
);
}
const messages = ['React', 'Re: React', 'Re:Re: React'];
ReactDOM.render(

  {unreadMessages.length > 0 && }

  Hello!

  您有 {unreadMessages.length} 條未讀信息。

  , document.getElementById('example'));

  在 JavaScript 中,true && expression 總是返回 expression,而 false && expression 總是返回 false。
因此,如果條件是 true,&& 右側的元素就會被渲染,如果是 false,React 會忽略並跳過它。

  三目運算符

  條件渲染的另一種方法是使用 JavaScript 的條件運算符:

  condition ? true : false。

  在下面的例子中,我們用它來有條件的渲染一小段文本。

  render() { const isLoggedIn = this.state.isLoggedIn; return (
The user is {isLoggedIn ? 'currently' : 'not'} logged in.
); }

  同樣它也可以用在較大的表達式中,雖然不太直觀:

  render() {
const isLoggedIn = this.state.isLoggedIn;
return (
);
}

  {isLoggedIn ? (

  ) : (

  )}

  阻止組件渲染

  在極少數情況下,你可能希望隱藏組件,即使它被其他組件渲染。讓 render 方法返回 null 而不是它的渲染結果即可實現。
在下面的例子中,

  根據屬性 warn 的值條件渲染。如果 warn 的值是 false,則組件不會渲染:

  React 實例

  function WarningBanner(props) {
if (!props.warn) {
return null;
}
return (
);
}
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 (
);
}
}
ReactDOM.render(

  警告!

  {this.state.showWarning ? '隱藏' : '顯示'}

  , document.getElementById('example'));

  組件的 render 方法返回 null 並不會影響該組件生命周期方法的回調。例如,componentWillUpdate 和 componentDidUpdate 依然可以被調用。

  

本文地址:https://www.linuxprobe.com/react-study-rendering.html

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關焦點

  • React源碼之組件的實現與首次渲染
    react: v15.0.0 本文講 組件如何編譯 以及 ReactDOM.render 的渲染過程。 babel 的編譯 babel 將 React JSX 編譯成 JavaScript.
  • 「首席架構師推薦」關於React生態系統的一系列精選資源(3)
    模型庫mori - ClojureScript的持久數據結構和支持APINestedTypes - 具有「純渲染」支持的快速可變模型swarm - JavaScript複製模型(MVC的M)庫caplet - JavaScript模型庫數據管理Immutable.js
  • Nike React Element 87——半透明薄如蟬翼
    右腳外側,有個Nike swoosh,側面的react中底,流動的線條感就給人一種運動的感覺。鞋帶頭也是設計,一邊是Nike swoosh,另一邊則是一個小樹的樣子。外底前後都有防滑的腳墊群覆蓋再react中底上,好看又實用。
  • 全掌React緩震Nike React Element 87測評
    該鞋中底採用react技術,鞋底彰顯耐克當下的輝煌,帶著未來感的半透明蟬翼鞋面象徵著耐克對未來的探索。 雖然react的減震效果微不足道,但它至少是設計師經過數百次篩選出的最佳材料,值得肯定。
  • React Suite 4.0 版本發布 - OSCHINA - 中文開源技術交流社區
    所以要使用 React Suite 4.0 版本必須升級 react 及 react-dom 至 >=16.6 的版本。4.2 Less 兼容性變更在本次版本中開始支持 Dark 主題,對 Less 文件的引入地址進行了調整。3.
  • 如何用純css打造類materialUI的按鈕點擊動畫並封裝成react組件
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言作為一個前端框架的重度使用者,在技術選型上也會非常注意其生態和完整性.筆者先後開發過基於vue,react,angular等框架的項目,碧如vue生態的elementUI, ant-design-vue, iView等成熟的UI框架
  • 七天學會javascript第一天javascript介紹
    javascript介紹javascript數據類型javascript運算符javascript對象javascript Date對象javascript String對象JavaScript常用於實現一些前端效果。前些年流行的flash已經慢慢的被淘汰,js盛行起來。javascript :客戶端編程。javascript是由客戶端去解釋運行的。
  • React vs Angular vs Vue.js——2019 該選誰?(更新版)
    然而,這需要更多的學習時間。單向數據綁定,使應用程式能夠實現單一行為,從而最小化可能錯誤的風險。MVVM(Model-View-ViewModel)允許開發者使用同一組數據處理同一個應用程式塊。與模塊中的組件和整體模塊化有關的依賴注入特性。特別針對大型項目創建的結構和架構。
  • Nike React Element 87高橋盾聯名測評
    蟬翼鞋面配上react中底,不僅在性能方面有了足夠的保證,而且腳感較以往更加舒適。下面我們就來揭曉一下,react緩震科技到底能否匹敵Adidas的中底BOOST。本次的試驗是將一個100克的砝碼從20公分(CM)高度,做自由落體運動,很顯然react回彈性表現不錯,回彈高度高達50%。
  • React 實現簡易的圖片拖動排序
    具體實現基本布局在實現拖拽功能之前,先完成基本布局:/** index.tsx */import React, { useMemo, useState } from'react'; },];const DragAndDropPage: React.FC = () => {const [list, setList] = useState(showList);// IMPORTANT: 動畫需要,需要保持一定的渲染順序
  • JavaScript中的「黑話」
    「算術」算術中的位運算已被作者列為禁術,因此希望你在工程中使用位運算時,請確保你有充足的理由使用,並在需要時寫好Hack注釋。!與!!!為邏輯非操作符,可以應用於ECMAScript中的任何值,無論這個值是什麼類型,它會被強制轉化為一個布爾值變量,再對其值取反。!!
  • 推薦一些 GitHub 上值得前端學習的開源實戰項目,進階必看!
    最近好多同學問我了解找一些學習的實戰項目;看一個別人寫的優秀的項目,從中可以學到很多;比如代碼的規範,項目的結構;從項目作者每次提交記錄,去學習一些別人的開發思維以及開發整個項目的流程;下面我主要找了一些比較火的一些框架以及 node 項目。
  • 什麼是JavaScript對象?如何創建並引用?這就告訴你!
    主要內容:對象的創建鍵名和鍵值對象的引用Math對象Date對象學習目標:為什麼要使用對象?因此上面的代碼也可以寫成下面這樣:var obj = { 'key': value };但是,如果屬性不符合標識符的條件(比如第一個字符為數字,或者含有空格或運算符),則必須加上引號。