国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

React的組件模式

Muninn / 2684人閱讀

摘要:有狀態(tài)組件通常使用和生命周期相關(guān)事件。組件模式是使用時的最佳實(shí)踐,最初引入組件模式是為了將數(shù)據(jù)邏輯和表現(xiàn)層進(jìn)行分離。這是一種可以對輸入組件的進(jìn)行修改增刪改查然后返回全新的修改后的組件強(qiáng)大模式,想想和。

想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你!

組件是 React 的核心,因此了解如何利用它們對于創(chuàng)建優(yōu)秀的設(shè)計(jì)結(jié)構(gòu)至關(guān)重要。

什么是組件

根據(jù) React 官網(wǎng)的介紹,“組件讓你可以將 UI 分割成獨(dú)立的、可重用的部分,并獨(dú)立管理每個部分。”

當(dāng)你第一次安裝 npm install react 時,會得到一件事:組件及其 API。與 JavaScript 函數(shù)類似,組件接受名為 “props” 的輸入并返回 React 元素,該元素描述(聲明)用戶界面(UI)的外觀。這就是為什么 React 被稱為聲明性 API,因?yàn)槟愀嬖V它你希望 UI 是什么樣子的,而 React 負(fù)責(zé)其余的工作。

可以把聲明式想像成當(dāng)打的去一個目的地時,只需要告訴司機(jī)去哪里,他就會開車把你送到那里。命令式編程正好相反—,你得自己駕車到那里。

組件的 API

當(dāng)安裝 React 后,便可以使用 React 提供的 API,基本可以分成 5 種。

render

state

props

context

lifecycle events

盡管一個組件可以使用上述所有 API,但一個組件通常用到只有少數(shù)幾個 API,而其他組件則只使用其他 API。

可以對組件使用不同的 API 對組件進(jìn)行劃分,分為 有狀態(tài)(stateful)無狀態(tài)(stateless) 兩種組件。

有狀態(tài)組件通常使用 API: render, state 和生命周期相關(guān)事件。

無狀態(tài)組件通常使用 API: render, props 和 context。

以上就是我們?yōu)槔幸榻B 組件模式 的原因。組件模式是使用 React 時的最佳實(shí)踐,最初引入組件模式是為了將數(shù)據(jù)邏輯和 UI 表現(xiàn)層進(jìn)行分離。通過在組件之間劃分職責(zé),您以創(chuàng)建更多可重用的、內(nèi)聚的組件,這些組件可用于組合復(fù)雜的 UI,這在構(gòu)建可擴(kuò)展的應(yīng)用程序時尤其重要。

組件模式

通常組件模式有以下幾種:

Container (容器組件)

Presentational (展示組件)

Higher order components (高級組件)

Render callback (渲染回調(diào))

Container (容器組件)

“容器組件就是取數(shù)據(jù),然后渲染子組件而已” —— Jason Bonta

容器組件是你的數(shù)據(jù)或邏輯層并利用 stateful API,使用生命周期事件,你可以連接 state
redux 或者 Fluxstorage 中,并將數(shù)據(jù)和回調(diào)作為 props 傳遞給子組件。

在容器組件的 render 方法中,你可以使用 展示組件 來渲染具體的樣式。為了能夠訪問到所有狀態(tài) API,容器組件必須使用 class 的方式聲明,而不是使用函數(shù)式方法聲明。

在下面的示例中,我們有一個名為 Greeting 的類組件,它具有狀態(tài),生命周期事件componentDidMount()render 方法。

class Greeting extends React.Component {
  constructor() {
    super();
    this.state = {
      name: "",
    };
  }

  componentDidMount() {
    // AJAX
    this.setState(() => {
      return {
        name: "William",
      };
    });
  }

  render() {
    return (
      

Hello! {this.state.name}

); } }

此時,該組件是一個有狀態(tài)類組件,為了使 Greeting 成為一個容器組件,我們可以將 UI 拆分為一個 展示組件,將在下面進(jìn)行說明。

展示組件

展示組件 使用 propsrendercontext (無狀態(tài)API),并且由于不需要使用生命周期相關(guān) Api,可以使用純函數(shù)來簡化表述它們:

const GreetingCard = (props) => {
  return (
    

Hello! {props.name}

) }

展示組件 僅從 props 接收數(shù)據(jù)和回調(diào),這些數(shù)據(jù)和回調(diào)可以由其容器組件(父組件)提供。

容器組件和展示組件各自將數(shù)據(jù)/邏輯和展示部分封裝到各自的組件中:

const GreetingCard = (props) => {
  return (
    

{props.name}

) } class Greeting extends React.Component { constructor() { super(); this.state = { name: "", }; } componentDidMount() { // AJAX this.setState(() => { return { name: "William", }; }); } render() { return (
); } }

如你所見,已經(jīng)將 Greeting 組件中展示相關(guān)的部分移動到了它自己的函數(shù)式展示組件中。當(dāng)然,這是一個非常簡單的例子——對于更復(fù)雜的應(yīng)用程序,這也是最基本的。

高階組件

高階組件是一種函數(shù),它接受一個組件作為參數(shù),然后返回一個新的組件。

這是一種可以對輸入組件的 props 進(jìn)行修改(增刪改查)然后返回全新的修改后的組件強(qiáng)大模式,想想 react-router-v4redux 。用了 react-router-v4 后,你可以使用 withRouter() 來繼承以 props 形式傳遞給組件的各種方法。同樣,用了redux,就可以使用 connect({})() 方法來將展示組件和 store 中的數(shù)據(jù)進(jìn)行連接。

代碼演示:

import {withRouter} from "react-router-dom";

class App extends React.Component {
  constructor() {
    super();
    this.state = {path: ""}
  }
  
  componentDidMount() {
    let pathName = this.props.location.pathname;
    this.setState(() => {
      return {
        path: pathName,
      }
    })
  }
  
  render() {
    return (
      

Hi! I"m being rendered at: {this.state.path}

) } } export default withRouter(App);

導(dǎo)出組件時,使用用 react-router-v4withRouter()方法封裝它。 在 組件 App 的生命周期事件 componentDidMount() 方法中,我們使用this.props.location.pathname 提供的值來更新 state。 由于我們使用了 withRouter 高階組件,我們可以直接訪問 this.props.locationlocation,而不需要直接將 location 作為 props 直接傳入,非常方便。

渲染回調(diào)

與高階組件類似,渲染回調(diào)或渲染 props 被用于共享或重用組件邏輯。雖然許多開發(fā)人員傾向于使用 高階組件 的可重用邏輯,但是使用 渲染回調(diào) 仍然有一些非常好的理由和優(yōu)勢——這是在 Michael Jackson 的“永不寫另一個高階組件”中得到了最好的解釋。簡而言之,渲染回調(diào)減少了命名空間沖突,并更好的說明了邏輯來源。

class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0,
    };
  }

  increment = () => {
    this.setState(prevState => {
      return {
        count: prevState.count + 1,
      };
    });
  };

  render() {
    return (
      
{this.props.children(this.state)}
); } } class App extends React.Component { render() { return ( {state => (

The count is: {state.count}

)}
); } }

Counter 類中,在 render 方法中嵌入 this.props.children 并將 this.state 作為參數(shù)。在 App 類中,我們可以將我們組件封裝在 Counter 組件中,因此我可以操作 Counter 組件內(nèi)的邏輯。

Counter 組件的本質(zhì)是暴露了 children 這個外部屬性,將 children 具體的渲染細(xì)節(jié)交個 Counter 的使用者,使用的時候只需要將組件傳入到 Counterchildren 中,當(dāng)然可以使用其他參數(shù),如果 children 不夠的話。

代碼部署后可能存在的BUG沒法實(shí)時知道,事后為了解決這些BUG,花了大量的時間進(jìn)行l(wèi)og 調(diào)試,這邊順便給大家推薦一個好用的BUG監(jiān)控工具 Fundebug。

原文:

https://medium.com/teamsubcha...

你的點(diǎn)贊是我持續(xù)分享好東西的動力,歡迎點(diǎn)贊!

歡迎加入前端大家庭,里面會經(jīng)常分享一些技術(shù)資源。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/101856.html

相關(guān)文章

  • React 深入系列7:React 常用模式

    摘要:本篇是深入系列的最后一篇,將介紹開發(fā)應(yīng)用時,經(jīng)常用到的模式,這些模式并非都有官方名稱,所以有些模式的命名并不一定準(zhǔn)確,請讀者主要關(guān)注模式的內(nèi)容。 React 深入系列,深入講解了React中的重點(diǎn)概念、特性和模式等,旨在幫助大家加深對React的理解,以及在項(xiàng)目中更加靈活地使用React。 本篇是React深入系列的最后一篇,將介紹開發(fā)React應(yīng)用時,經(jīng)常用到的模式,這些模式并非都有...

    Chao 評論0 收藏0
  • [譯] React.js 模式

    摘要:此時,我將它寫下來討論和分享這些我發(fā)現(xiàn)的模式。正確的姿勢應(yīng)該是通過的方式獲取子組件的一些信息。高階組件是需要另外一個有用的模式依賴注入。也有部分人稱它是一種模式。最直接的方式是通過每一層通過來傳遞。 原文出自:http://krasimirtsonev.com/blog/article/react-js-in-design-patterns 前言 我想找一個好的前端前端框架,找了很久。...

    mumumu 評論0 收藏0
  • 精益 React 學(xué)習(xí)指南 (Lean React)- 1.1 React 介紹

    摘要:單向數(shù)據(jù)流應(yīng)用的核心設(shè)計(jì)模式,數(shù)據(jù)流向自頂向下我也是性子急的人,按照技術(shù)界的慣例,在學(xué)習(xí)一個技術(shù)前,首先得說一句。然而的單向數(shù)據(jù)流的設(shè)計(jì)讓前端定位變得簡單,頁面的和數(shù)據(jù)的對應(yīng)是唯一的我們可以通過定位數(shù)據(jù)變化就可以定位頁面展現(xiàn)問題。 書籍完整目錄 1.1 React 介紹 showImg(https://segmentfault.com/img/bVvJgS); 1.1.1 React ...

    lsxiao 評論0 收藏0
  • With TypeScript 2.8+ :更好 React 組件開發(fā)模式

    摘要:近兩年來一直在關(guān)注開發(fā),最近也開始全面應(yīng)用。首先,我們從無狀態(tài)組件開始。渲染回調(diào)模式有一種重用組件邏輯的設(shè)計(jì)方式是把組件的寫成渲染回調(diào)函數(shù)或者暴露一個函數(shù)屬性出來。最后,我們將這個回調(diào)函數(shù)的參數(shù)聲明為一個獨(dú)立的類型。 近兩年來一直在關(guān)注 React 開發(fā),最近也開始全面應(yīng)用 TypeScript 。國內(nèi)有很多講解 React 和 TypeScript 的教程,但如何將 TypeScri...

    simon_chen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<