成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

React.js 小書 Lesson26 - 實(shí)戰(zhàn)分析:評(píng)論功能(五)

Nekron / 2914人閱讀

摘要:修改請(qǐng)輸入用戶名請(qǐng)輸入評(píng)論內(nèi)容我們?cè)黾恿撕头謩e用于加載和保存評(píng)論列表數(shù)據(jù)?,F(xiàn)在發(fā)布評(píng)論,然后刷新可以看到我們的評(píng)論并不會(huì)像以前一樣消失。非常的不錯(cuò),持久化評(píng)論的功能也完成了。下一節(jié)中我們將介紹小書實(shí)戰(zhàn)分析評(píng)論功能六。

React.js 小書 Lesson26 - 實(shí)戰(zhàn)分析:評(píng)論功能(五)

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

轉(zhuǎn)載請(qǐng)注明出處,保留原文鏈接以及作者信息

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

持久化評(píng)論

同樣地,可以通過類似于用戶名持久化的方式對(duì)評(píng)論列表內(nèi)容進(jìn)行持久化,讓用戶發(fā)布的評(píng)論在刷新頁面以后依然可以存在。修改 src/CommentApp.js

class CommentApp extends Component {
  constructor () {
    super()
    this.state = {
      comments: []
    }
  }

  componentWillMount () {
    this._loadComments()
  }

  _loadComments () {
    let comments = localStorage.getItem("comments")
    if (comments) {
      comments = JSON.parse(comments)
      this.setState({ comments })
    }
  }

  _saveComments (comments) {
    localStorage.setItem("comments", JSON.stringify(comments))
  }

  handleSubmitComment (comment) {
    if (!comment) return
    if (!comment.username) return alert("請(qǐng)輸入用戶名")
    if (!comment.content) return alert("請(qǐng)輸入評(píng)論內(nèi)容")
    const comments = this.state.comments
    comments.push(comment)
    this.setState({ comments })
    this._saveComments(comments)
  }
...

我們?cè)黾恿?_loadComments_saveComments 分別用于加載和保存評(píng)論列表數(shù)據(jù)。用戶每次提交評(píng)論都會(huì)把評(píng)論列表數(shù)據(jù)保存一次,所以我們?cè)?handleSubmitComment 調(diào)用 _saveComments 方法;而在 componentWillMount 中調(diào)用 _loadComments 方法,在組件開始掛載的時(shí)候把評(píng)論列表數(shù)據(jù)加載出來 setStatethis.state 當(dāng)中,組件就可以渲染從 LocalStorage 從加載出來的評(píng)論列表數(shù)據(jù)了。

現(xiàn)在發(fā)布評(píng)論,然后刷新可以看到我們的評(píng)論并不會(huì)像以前一樣消失。非常的不錯(cuò),持久化評(píng)論的功能也完成了。

顯示評(píng)論發(fā)布時(shí)間

現(xiàn)在我們給每條評(píng)論都加上發(fā)布的日期,并且在評(píng)論列表項(xiàng)上顯示已經(jīng)發(fā)表了多久,例如“1 秒前”、“30分鐘前”,并且會(huì)每隔 5 秒進(jìn)行更新。修改 src/CommentInput.js 當(dāng)用戶點(diǎn)擊發(fā)布按鈕的時(shí)候,傳出去的評(píng)論數(shù)據(jù)帶上評(píng)論發(fā)布的時(shí)間戳:

...
  handleSubmit () {
    if (this.props.onSubmit) {
      this.props.onSubmit({
        username: this.state.username,
        content: this.state.content,
        createdTime: +new Date()
      })
    }
    this.setState({ content: "" })
  }
...

在評(píng)論列表項(xiàng)上顯示評(píng)論,修改 src/comment.js

class Comment extends Component {
  static propTypes = {
    comment: PropTypes.object.isRequired
  }

  constructor () {
    super()
    this.state = { timeString: "" }
  }

  componentWillMount () {
    this._updateTimeString()
  }

  _updateTimeString () {
    const comment = this.props.comment
    const duration = (+Date.now() - comment.createdTime) / 1000
    this.setState({
      timeString: duration > 60
        ? `${Math.round(duration / 60)} 分鐘前`
        : `${Math.round(Math.max(duration, 1))} 秒前`
    })
  }

  render () {
    return (
      
{this.props.comment.username}

{this.props.comment.content}

{this.state.timeString}
) } }

每個(gè) Comment 組件實(shí)例會(huì)保存一個(gè) timeString 狀態(tài),用于該評(píng)論顯示發(fā)布了多久。_updateTimeString 這個(gè)私有方法會(huì)根據(jù) props.comment 里面的 createdTime 來更新這個(gè) timeString:計(jì)算當(dāng)前時(shí)間和評(píng)論發(fā)布時(shí)間的時(shí)間差,如果已經(jīng)發(fā)布 60 秒以上就顯示分鐘,否則就顯示秒。然后 componentWillMount 會(huì)在組件掛載階段調(diào)用 _updateTimeString 更新一下這個(gè)字符串,render() 方法就把這個(gè)顯示時(shí)間差的字符串渲染到一個(gè) 上。

再看看頁面顯示:

這時(shí)候的時(shí)間是不會(huì)自動(dòng)更新的。除非你手動(dòng)刷新頁面,否則永遠(yuǎn)顯示“1 秒前”。我們可以在 componentWillMount 中啟動(dòng)一個(gè)定時(shí)器,每隔 5 秒調(diào)用一下 _updateTimeString,讓它去通過 setState 更新 timeString

...
  componentWillMount () {
    this._updateTimeString()
    this._timer = setInterval(
      this._updateTimeString.bind(this),
      5000
    )
  }
...

這樣就可以做到評(píng)論的發(fā)布時(shí)間自動(dòng)刷新了,到這里前 4 個(gè)需求都已經(jīng)完成了。

下一節(jié)中我們將介紹《React.js 小書 Lesson27 - 實(shí)戰(zhàn)分析:評(píng)論功能(六)》。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89677.html

相關(guān)文章

  • 寫一本關(guān)于 React.js小書

    摘要:因?yàn)楣ぷ髦幸恢痹谑褂?,也一直以來想總結(jié)一下自己關(guān)于的一些知識(shí)經(jīng)驗(yàn)。于是把一些想法慢慢整理書寫下來,做成一本開源免費(fèi)專業(yè)簡(jiǎn)單的入門級(jí)別的小書,提供給社區(qū)。本書的后續(xù)可能會(huì)做成視頻版本,敬請(qǐng)期待。本作品采用署名禁止演繹國(guó)際許可協(xié)議進(jìn)行許可 React.js 小書 本文作者:胡子大哈本文原文:React.js 小書 轉(zhuǎn)載請(qǐng)注明出處,保留原文鏈接以及作者信息 在線閱讀:http://huzi...

    Scorpion 評(píng)論0 收藏0
  • React.js 小書 Lesson25 - 實(shí)戰(zhàn)分析評(píng)論功能(四)

    摘要:接下來是實(shí)戰(zhàn)環(huán)節(jié),我們會(huì)繼續(xù)上一階段的例子,把評(píng)論功能做得更加復(fù)雜一點(diǎn)。把已經(jīng)發(fā)布的評(píng)論持久化,存放到瀏覽器的中。評(píng)論顯示發(fā)布日期,如秒前,分鐘前,并且會(huì)每隔秒更新發(fā)布日期。事件監(jiān)聽方法,。下一節(jié)中我們將介紹小書實(shí)戰(zhàn)分析評(píng)論功能五。 React.js 小書 Lesson25 - 實(shí)戰(zhàn)分析:評(píng)論功能(四) 本文作者:胡子大哈本文原文:http://huziketang.com/book...

    mozillazg 評(píng)論0 收藏0
  • React.js 小書 Lesson16 - 實(shí)戰(zhàn)分析評(píng)論功能(三)

    摘要:但是給傳遞的評(píng)論數(shù)據(jù)并沒有傳遞給,所以現(xiàn)在發(fā)表評(píng)論時(shí)沒有反應(yīng)的。包括實(shí)現(xiàn)功能之前先理解分析需求,劃分組件。到此為止,小書的第一階段已經(jīng)結(jié)束,你可以利用這些知識(shí)點(diǎn)來構(gòu)建簡(jiǎn)單的功能模塊了。 React.js 小書 Lesson16 - 實(shí)戰(zhàn)分析:評(píng)論功能(三) 本文作者:胡子大哈本文原文:http://huziketang.com/books/react/lesson16 轉(zhuǎn)載請(qǐng)注明出處...

    Gilbertat 評(píng)論0 收藏0
  • React.js 小書 Lesson14 - 實(shí)戰(zhàn)分析評(píng)論功能(一)

    摘要:對(duì)于上面這個(gè)評(píng)論功能,可以粗略地劃分成以下幾部分評(píng)論功能的整體用一個(gè)叫的組件包含起來。每個(gè)評(píng)論列表項(xiàng)由獨(dú)立的組件負(fù)責(zé)顯示,這個(gè)組件被所使用。下一節(jié)中我們將介紹小書實(shí)戰(zhàn)分析評(píng)論功能二。 React.js 小書 Lesson14 - 實(shí)戰(zhàn)分析:評(píng)論功能(一) 本文作者:胡子大哈本文原文:http://react.huziketang.com/blog/lesson14 轉(zhuǎn)載請(qǐng)注明出處,保...

    QiuyueZhong 評(píng)論0 收藏0
  • React.js 小書 Lesson15 - 實(shí)戰(zhàn)分析評(píng)論功能(二)

    摘要:例如,上面設(shè)置了的為,在中被初始化為空字符串。如何向傳遞的數(shù)據(jù)父組件只需要通過給子組件傳入一個(gè)回調(diào)函數(shù)。當(dāng)用戶點(diǎn)擊發(fā)布按鈕的時(shí)候,調(diào)用中的回調(diào)函數(shù)并且將傳入該函數(shù)即可。下一節(jié)中我們將介紹小書實(shí)戰(zhàn)分析評(píng)論功能三。 React.js 小書 Lesson15 - 實(shí)戰(zhàn)分析:評(píng)論功能(二) 本文作者:胡子大哈本文原文:http://huziketang.com/books/react/les...

    siberiawolf 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<