最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解React 條件渲染

 更新時間:2020年07月08日 08:34:44   作者:菜鳥教程  
這篇文章主要介紹了React 條件渲染的相關資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下

在 React 中,你可以創(chuàng)建不同的組件來封裝各種你需要的行為。然后還可以根據(jù)應用的狀態(tài)變化只渲染其中的一部分。

React 中的條件渲染和 JavaScript 中的一致,使用 JavaScript 操作符 if 或條件運算符來創(chuàng)建表示當前狀態(tài)的元素,然后讓 React 根據(jù)它們來更新 UI。

先來看兩個組件:

function UserGreeting(props) {
 return <h1>歡迎回來!</h1>;
}

function GuestGreeting(props) {
 return <h1>請先注冊。</h1>;
}

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

function Greeting(props) {
 const isLoggedIn = props.isLoggedIn;
 if (isLoggedIn) {
 return <UserGreeting />;
 }
 return <GuestGreeting />;
}
 
ReactDOM.render(
 // 嘗試修改 isLoggedIn={true}:
 <Greeting isLoggedIn={false} />,
 document.getElementById('example')
);

元素變量

你可以使用變量來儲存元素。它可以幫助你有條件的渲染組件的一部分,而輸出的其他部分不會更改。

在下面的例子中,我們將要創(chuàng)建一個名為 LoginControl 的有狀態(tài)的組件。

它會根據(jù)當前的狀態(tài)來渲染 <LoginButton /><LogoutButton />,它也將渲染前面例子中的 <Greeting />

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('example')
);

與運算符 &&

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

function Mailbox(props) {
 const unreadMessages = props.unreadMessages;
 return (
 <div>
  <h1>Hello!</h1>
  {unreadMessages.length > 0 &&
  <h2>
   您有 {unreadMessages.length} 條未讀信息。
  </h2>
  }
 </div>
 );
}
 
const messages = ['React', 'Re: React', 'Re:Re: React'];
ReactDOM.render(
 <Mailbox unreadMessages={messages} />,
 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 (
 <div>
  {isLoggedIn ? (
  <LogoutButton onClick={this.handleLogoutClick} />
  ) : (
  <LoginButton onClick={this.handleLoginClick} />
  )}
 </div>
 );
}

阻止組件渲染

在極少數(shù)情況下,你可能希望隱藏組件,即使它被其他組件渲染。讓 render 方法返回 null 而不是它的渲染結果即可實現(xiàn)。

在下面的例子中,<WarningBanner /> 根據(jù)屬性 warn 的值條件渲染。如果 warn 的值是 false,則組件不會渲染:

function WarningBanner(props) {
 if (!props.warn) {
 return null;
 }
 
 return (
 <div className="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 ? '隱藏' : '顯示'}
  </button>
  </div>
 );
 }
}
 
ReactDOM.render(
 <Page />,
 document.getElementById('example')
);

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

以上就是詳解React 條件渲染的詳細內容,更多關于React 條件渲染的資料請關注腳本之家其它相關文章!

相關文章

  • React使用Context與router實現(xiàn)權限路由詳細介紹

    React使用Context與router實現(xiàn)權限路由詳細介紹

    這篇文章主要介紹了React使用Context與router實現(xiàn)權限路由的詳細過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • 如何解決React useEffect鉤子帶來的無限循環(huán)問題

    如何解決React useEffect鉤子帶來的無限循環(huán)問題

    本文主要介紹了解決React useEffect鉤子帶來的無限循環(huán)問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • React工作流程及Error Boundaries實現(xiàn)過程講解

    React工作流程及Error Boundaries實現(xiàn)過程講解

    這篇文章主要介紹了React工作流程及Error Boundaries實現(xiàn)過程講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-02-02
  • React改變元素樣式的操作代碼

    React改變元素樣式的操作代碼

    這篇文章主要介紹了React技巧之改變元素樣式,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • 封裝一個最簡單ErrorBoundary組件處理react異常

    封裝一個最簡單ErrorBoundary組件處理react異常

    這篇文章主要介紹了一個處理react異常的ErrorBoundary組件,簡單實用,代碼詳細,對這個組件感興趣的朋友可以參考下
    2021-04-04
  • 深入淺析React refs的簡介

    深入淺析React refs的簡介

    React中的Refs提供了一種方式,允許我們訪問DOM節(jié)點或在render方法中創(chuàng)建的React元素,本文給大家介紹react refs的相關知識,感興趣的朋友一起看看吧
    2021-07-07
  • React Fiber結構的創(chuàng)建步驟

    React Fiber結構的創(chuàng)建步驟

    這篇文章主要介紹了React Fiber結構的創(chuàng)建步驟,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下
    2021-04-04
  • 詳解create-react-app 自定義 eslint 配置

    詳解create-react-app 自定義 eslint 配置

    這篇文章主要介紹了詳解create-react-app 自定義 eslint 配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • react?hooks中的useState使用要點

    react?hooks中的useState使用要點

    這篇文章主要為大家介紹了react?hooks中的useState使用要點詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • React 18版本配置rem 和 vw的詳細步驟

    React 18版本配置rem 和 vw的詳細步驟

    這篇文章主要介紹了React 18版本配置rem 和 vw的詳細步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01

最新評論

兴山县| 沛县| 高尔夫| 伊吾县| 绥中县| 淳安县| 新巴尔虎右旗| 河源市| 封开县| 尚志市| 焦作市| 富裕县| 肃宁县| 德昌县| 卢氏县| 衡水市| 易门县| 修武县| 天祝| 肇庆市| 界首市| 金阳县| 平潭县| 马尔康县| 东阳市| 嘉黎县| 怀柔区| 宁国市| 遂溪县| 大姚县| 丰宁| 普兰店市| 洪湖市| 武鸣县| 那坡县| 犍为县| 钟山县| 师宗县| 康马县| 峨眉山市| 西和县|