摘要:但是給傳遞的評論數據并沒有傳遞給,所以現在發表評論時沒有反應的。包括實現功能之前先理解分析需求,劃分組件。到此為止,小書的第一階段已經結束,你可以利用這些知識點來構建簡單的功能模塊了。
React.js 小書 Lesson16 - 實戰分析:評論功能(三)
本文作者:胡子大哈
本文原文:http://huziketang.com/books/react/lesson16
轉載請注明出處,保留原文鏈接以及作者信息
在線閱讀:http://huziketang.com/books/react
接下來的代碼比較順理成章了。修改 CommentList 可以讓它可以顯示評論列表:
// CommentList.js import React, { Component } from "react" class CommentList extends Component { render() { const comments = [ {username: "Jerry", content: "Hello"}, {username: "Tomy", content: "World"}, {username: "Lucy", content: "Good"} ] return ({comments.map((comment, i) => { return () } } export default CommentList{comment.username}:{comment.content}) })}
這里的代碼沒有什么新鮮的內容,只不過是建立了一個 comments 的數組來存放一些測試數據的內容,方便我們后續測試。然后把 comments 的數據渲染到頁面上,這跟我們之前講解的章節的內容一樣——使用 map 構建一個存放 JSX 的數組。就可以在瀏覽器看到效果:
修改 Comment.js 讓它來負責具體每條評論內容的渲染:
import React, { Component } from "react" class Comment extends Component { render () { return () } } export default Comment{this.props.comment.username} :{this.props.comment.content}
這個組件可能是我們案例里面最簡單的組件了,它只負責每條評論的具體顯示。你只需要給它的 props 中傳入一個 comment 對象,它就會把該對象中的 username 和 content 渲染到頁面上。
馬上把 Comment 應用到 CommentList 當中,修改 CommentList.js 代碼:
import React, { Component } from "react" import Comment from "./Comment" class CommentList extends Component { render() { const comments = [ {username: "Jerry", content: "Hello"}, {username: "Tomy", content: "World"}, {username: "Lucy", content: "Good"} ] return ({comments.map((comment, i) =>) } } export default CommentList)}
可以看到測試數據顯示到了頁面上:
之前我們說過 CommentList 的數據應該是由父組件 CommentApp 傳進來的,現在我們刪除測試數據,改成從 props 獲取評論數據:
import React, { Component } from "react" import Comment from "./Comment" class CommentList extends Component { render() { return ({this.props.comments.map((comment, i) =>) } } export default CommentList)}
這時候可以看到瀏覽器報錯了:
這是因為CommentApp 使用 CommentList 的時候并沒有傳入 comments。我們給 CommentList 加上 defaultProps 防止 comments 不傳入的情況:
class CommentList extends Component { static defaultProps = { comments: [] } ...
這時候代碼就不報錯了。但是 CommentInput 給 CommentApp 傳遞的評論數據并沒有傳遞給 CommentList,所以現在發表評論時沒有反應的。
我們在 CommentApp 的 state 中初始化一個數組,來保存所有的評論數據,并且通過 props 把它傳遞給 CommentList。修改 CommentApp.js:
import React, { Component } from "react" import CommentInput from "./CommentInput" import CommentList from "./CommentList" class CommentApp extends Component { constructor () { super() this.state = { comments: [] } } handleSubmitComment (comment) { console.log(comment) } render() { return () } } export default CommentApp
接下來,修改 handleSubmitComment :每當用戶發布評論的時候,就把評論數據插入 this.state.comments 中,然后通過 setState 把數據更新到頁面上:
... handleSubmitComment (comment) { this.state.comments.push(comment) this.setState({ comments: this.state.comments }) } ...
現在代碼應該是可以按照需求正常運作了,輸入用戶名和評論內容,然后點擊發布:
為了讓代碼的健壯性更強,給 handleSubmitComment 加入簡單的數據檢查:
... handleSubmitComment (comment) { if (!comment) return if (!comment.username) return alert("請輸入用戶名") if (!comment.content) return alert("請輸入評論內容") this.state.comments.push(comment) this.setState({ comments: this.state.comments }) } ...
到這里,我們的第一個實戰案例——評論功能已經完成了!完整的案例代碼可以在這里 comment-app 找到, 在線演示 體驗。
總結在這個案例里面,我們除了復習了之前所學過的內容以外還學習了新的知識點。包括:
實現功能之前先理解、分析需求,劃分組件。并且掌握劃分組件的基本原則——可復用性、可維護性。
受控組件的概念,React.js 中的 、、 等元素的 value 值如果是受到 React.js 的控制,那么就是受控組件。
組件之間使用 props 通過父元素傳遞數據的技巧。
當然,在真實的項目當中,這個案例很多地方是可以優化的。包括組件可復用性方面(有沒有發現其實 CommentInput 中有重復的代碼?)、應用的狀態管理方面。但在這里為了給大家總結和演示,實現到這個程度也就足夠了。
到此為止,React.js 小書的第一階段已經結束,你可以利用這些知識點來構建簡單的功能模塊了。但是在實際項目如果要構建比較系統和完善的功能,還需要更多的 React.js 的知識還有關于前端開發的一些認知來協助我們。接下來我們會開啟新的一個階段來學習更多關于 React.js 的知識,以及如何更加靈活和熟練地使用它們。讓我們進入第二階段吧!
下一節中我們將介紹《React.js 小書 Lesson17 - 前端應用狀態管理 —— 狀態提升)》。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89687.html
摘要:因為工作中一直在使用,也一直以來想總結一下自己關于的一些知識經驗。于是把一些想法慢慢整理書寫下來,做成一本開源免費專業簡單的入門級別的小書,提供給社區。本書的后續可能會做成視頻版本,敬請期待。本作品采用署名禁止演繹國際許可協議進行許可 React.js 小書 本文作者:胡子大哈本文原文:React.js 小書 轉載請注明出處,保留原文鏈接以及作者信息 在線閱讀:http://huzi...
摘要:例如,上面設置了的為,在中被初始化為空字符串。如何向傳遞的數據父組件只需要通過給子組件傳入一個回調函數。當用戶點擊發布按鈕的時候,調用中的回調函數并且將傳入該函數即可。下一節中我們將介紹小書實戰分析評論功能三。 React.js 小書 Lesson15 - 實戰分析:評論功能(二) 本文作者:胡子大哈本文原文:http://huziketang.com/books/react/les...
摘要:修改請輸入用戶名請輸入評論內容我們增加了和分別用于加載和保存評論列表數據。現在發布評論,然后刷新可以看到我們的評論并不會像以前一樣消失。非常的不錯,持久化評論的功能也完成了。下一節中我們將介紹小書實戰分析評論功能六。 React.js 小書 Lesson26 - 實戰分析:評論功能(五) 本文作者:胡子大哈本文原文:http://huziketang.com/books/react/...
摘要:對于上面這個評論功能,可以粗略地劃分成以下幾部分評論功能的整體用一個叫的組件包含起來。每個評論列表項由獨立的組件負責顯示,這個組件被所使用。下一節中我們將介紹小書實戰分析評論功能二。 React.js 小書 Lesson14 - 實戰分析:評論功能(一) 本文作者:胡子大哈本文原文:http://react.huziketang.com/blog/lesson14 轉載請注明出處,保...
摘要:所以我們給評論組件加上刪除評論的功能,這樣就可以刪除不想要的評論了。輸入這是代碼塊,這是正常內容。到目前為止,第二階段的實戰已經全部完成,你可以在這里找到完整的代碼。下一節中我們將介紹小書高階組件。 React.js 小書 Lesson27 - 實戰分析:評論功能(六) 本文作者:胡子大哈本文原文:http://huziketang.com/books/react/lesson27 ...
閱讀 3146·2021-11-22 12:01
閱讀 3767·2021-08-30 09:46
閱讀 784·2019-08-30 13:48
閱讀 3209·2019-08-29 16:43
閱讀 1657·2019-08-29 16:33
閱讀 1848·2019-08-29 13:44
閱讀 1410·2019-08-26 13:45
閱讀 2228·2019-08-26 11:44