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

資訊專欄INFORMATION COLUMN

React.js 小書 Lesson11 - 配置組件的 props

xiangzhihong / 1524人閱讀

摘要:默認配置上面的組件默認配置我們是通過操作符來實現。但這并不意味著由決定的顯示形態不能被修改。組件可以在內部通過獲取到配置參數,組件可以根據的不同來確定自己的顯示形態,達到可配置的效果。下一節中我們將介紹小書。

React.js 小書 Lesson11 - 配置組件的 props

本文作者:胡子大哈
本文原文:http://huziketang.com/books/react/lesson11

轉載請注明出處,保留原文鏈接以及作者信息

在線閱讀:http://huziketang.com/books/react

組件是相互獨立、可復用的單元,一個組件可能在不同地方被用到。但是在不同的場景下對這個組件的需求可能會根據情況有所不同,例如一個點贊按鈕組件,在我這里需要它顯示的文本是“點贊”和“取消”,當別的同事拿過去用的時候,卻需要它顯示“贊”和“已贊”。如何讓組件能適應不同場景下的需求,我們就要讓組件具有一定的“可配置”性。

React.js 的 props 就可以幫助我們達到這個效果。每個組件都可以接受一個 props 參數,它是一個對象,包含了所有你對這個組件的配置。就拿我們點贊按鈕做例子:

下面的代碼可以讓它達到上述的可配置性:

class LikeButton extends Component {
  constructor () {
    super()
    this.state = { isLiked: false }
  }

  handleClickOnLikeButton () {
    this.setState({
      isLiked: !this.state.isLiked
    })
  }

  render () {
    const likedText = this.props.likedText || "取消"
    const unlikedText = this.props.unlikedText || "點贊"
    return (
      
    )
  }
}

render 函數可以看出來,組件內部是通過 this.props 的方式獲取到組件的參數的,如果 this.props 里面有需要的屬性我們就采用相應的屬性,沒有的話就用默認的屬性。

那么怎么把 props 傳進去呢?在使用一個組件的時候,可以把參數放在標簽的屬性當中,所有的屬性都會作為 props 對象的鍵值

class Index extends Component {
  render () {
    return (
      
) } }

就像你在用普通的 HTML 標簽的屬性一樣,可以把參數放在表示組件的標簽上,組件內部就可以通過 this.props 來訪問到這些配置參數了。

前面的章節我們說過,JSX 的表達式插入可以在標簽屬性上使用。所以其實可以把任何類型的數據作為組件的參數,包括字符串、數字、對象、數組、甚至是函數等等。例如現在我們把一個對象傳給點贊組件作為參數:

class Index extends Component {
  render () {
    return (
      
) } }

現在我們把 likedTextunlikedText 這兩個參數封裝到一個叫 wordings 的對象參數內,然后傳入點贊組件中。大家看到 {{likedText: "已贊", unlikedText: "贊"}} 這樣的代碼的時候,不要以為是什么新語法。之前討論過,JSX 的 {} 內可以嵌入任何表達式,{{}} 就是在 {} 內部用對象字面量返回一個對象而已。

這時候,點贊按鈕的內部就要用 this.props.wordings 來獲取到到參數了:

class LikeButton extends Component {
  constructor () {
    super()
    this.state = { isLiked: false }
  }

  handleClickOnLikeButton () {
    this.setState({
      isLiked: !this.state.isLiked
    })
  }

  render () {
    const wordings = this.props.wordings || {
      likedText: "取消",
      unlikedText: "點贊"
    }
    return (
      
    )
  }
}

甚至可以往組件內部傳入函數作為參數:

class Index extends Component {
  render () {
    return (
      
console.log("Click on like button!")}/>
) } }

這樣可以通過 this.props.onClick 獲取到這個傳進去的函數,修改 LikeButton handleClickOnLikeButton 方法:

...
  handleClickOnLikeButton () {
    this.setState({
      isLiked: !this.state.isLiked
    })
    if (this.props.onClick) {
      this.props.onClick()
    }
  }
...

當每次點擊按鈕的時候,控制臺會顯示 Click on like button! 。但這個行為不是點贊組件自己實現的,而是我們傳進去的。所以,一個組件的行為、顯示形態都可以用 props 來控制,就可以達到很好的可配置性。

默認配置 defaultProps

上面的組件默認配置我們是通過 || 操作符來實現。這種需要默認配置的情況在 React.js 中非常常見,所以 React.js 也提供了一種方式 defaultProps,可以方便的做到默認配置。

class LikeButton extends Component {
  static defaultProps = {
    likedText: "取消",
    unlikedText: "點贊"
  }

  constructor () {
    super()
    this.state = { isLiked: false }
  }

  handleClickOnLikeButton () {
    this.setState({
      isLiked: !this.state.isLiked
    })
  }

  render () {
    return (
      
    )
  }
}

注意,我們給點贊組件加上了以下的代碼:

  static defaultProps = {
    likedText: "取消",
    unlikedText: "點贊"
  }

defaultProps 作為點贊按鈕組件的類屬性,里面是對 props 中各個屬性的默認配置。這樣我們就不需要判斷配置屬性是否傳進來了:如果沒有傳進來,會直接使用 defaultProps 中的默認屬性。 所以可以看到,在 render 函數中,我們會直接使用 this.props 而不需要再做判斷。

props 不可變

props 一旦傳入進來就不能改變。修改上面的例子中的 handleClickOnLikeButton

...
  handleClickOnLikeButton () {
    this.props.likedText = "取消"
    this.setState({
      isLiked: !this.state.isLiked
    })
  }
...

我們嘗試在用戶點擊按鈕的時候改變 this.props.likedText ,然后你會看到控制臺報錯了:

你不能改變一個組件被渲染的時候傳進來的 props。React.js 希望一個組件在輸入確定的 props 的時候,能夠輸出確定的 UI 顯示形態。如果 props 渲染過程中可以被修改,那么就會導致這個組件顯示形態和行為變得不可預測,這樣會可能會給組件使用者帶來困惑。

但這并不意味著由 props 決定的顯示形態不能被修改。組件的使用者可以主動地通過重新渲染的方式把新的 props 傳入組件當中,這樣這個組件中由 props 決定的顯示形態也會得到相應的改變。

修改上面的例子的 Index 組件:

class Index extends Component {
  constructor () {
    super()
    this.state = {
      likedText: "已贊",
      unlikedText: "贊"
    }
  }

  handleClickOnChange () {
    this.setState({
      likedText: "取消",
      unlikedText: "點贊"
    })
  }

  render () {
    return (
      
) } }

在這里,我們把 Indexstate 中的 likedTextunlikedText 傳給 LikeButtonIndex 還有另外一個按鈕,點擊這個按鈕會通過 setState 修改 Indexstate 中的兩個屬性。

由于 setState 會導致 Index 重新渲染,所以 LikedButton 會接收到新的 props,并且重新渲染,于是它的顯示形態也會得到更新。這就是通過重新渲染的方式來傳入新的 props 從而達到修改 LikedButton 顯示形態的效果。

總結

為了使得組件的可定制性更強,在使用組件的時候,可以在標簽上加屬性來傳入配置參數。

組件可以在內部通過 this.props 獲取到配置參數,組件可以根據 props 的不同來確定自己的顯示形態,達到可配置的效果。

可以通過給組件添加類屬性 defaultProps 來配置默認參數。

props 一旦傳入,你就不可以在組件內部對它進行修改。但是你可以通過父組件主動重新渲染的方式來傳入新的 props,從而達到更新的效果。

下一節中我們將介紹《React.js 小書 Lesson12 - state vs props》。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89663.html

相關文章

  • 寫一本關于 React.js 小書

    摘要:因為工作中一直在使用,也一直以來想總結一下自己關于的一些知識經驗。于是把一些想法慢慢整理書寫下來,做成一本開源免費專業簡單的入門級別的小書,提供給社區。本書的后續可能會做成視頻版本,敬請期待。本作品采用署名禁止演繹國際許可協議進行許可 React.js 小書 本文作者:胡子大哈本文原文:React.js 小書 轉載請注明出處,保留原文鏈接以及作者信息 在線閱讀:http://huzi...

    Scorpion 評論0 收藏0
  • React.js 小書 Lesson12 - state vs props

    摘要:的主要作用是用于組件保存控制修改自己的可變狀態。它們都可以決定組件的行為和顯示形態。但是它們的職責其實非常明晰分明是讓組件控制自己的狀態,是讓外部對組件自己進行配置。下一節中我們將介紹小書渲染列表數據。 React.js 小書 Lesson12 - state vs props 本文作者:胡子大哈本文原文:http://huziketang.com/books/react/lesso...

    call_me_R 評論0 收藏0
  • React.js 小書 Lesson10 - 組件 state 和 setState

    摘要:傳入一個對象的時候,這個對象表示該組件的新狀態。下一節中我們將介紹小書配置組件的。 React.js 小書 Lesson10 - 組件的 state 和 setState 本文作者:胡子大哈本文原文:http://huziketang.com/books/react/lesson10 轉載請注明出處,保留原文鏈接以及作者信息 在線閱讀:http://huziketang.com/bo...

    tyheist 評論0 收藏0
  • React.js 小書 Lesson4 - 前端組件化(三):抽象出公共組件

    摘要:最后抽離出來了一個類,可以幫助我們更好的做組件化。一個組件有自己的顯示形態上面的結構和內容行為,組件的顯示形態和行為可以由數據狀態和配置參數共同決定。接下來我們開始正式進入主題,開始正式介紹。下一節鏈接直達小書基本環境安裝 React.js 小書 Lesson4 - 前端組件化(三):抽象出公共組件類 本文作者:胡子大哈本文原文:http://huziketang.com/books...

    jsbintask 評論0 收藏0
  • React.js 小書 Lesson22 - props.children 和容器類組件

    摘要:由于會把插入表達式里面數組中的一個個羅列下來顯示。這樣通過這個布局組件,就可以在各個地方高度復用我們的布局。嵌套的結構在組件內部都可以通過獲取到,這種組件編寫方式在編寫容器類型的組件當中非常有用。下一節中我們將介紹小書和屬性。 React.js 小書 Lesson22 - props.children 和容器類組件 本文作者:胡子大哈本文原文:http://huziketang.co...

    番茄西紅柿 評論0 收藏0

發表評論

0條評論

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