摘要:今天,我們將把我們的組件設(shè)置為由數(shù)據(jù)驅(qū)動(dòng),訪問外部數(shù)據(jù)。介紹屬性允許我們以與相同的語法向組件發(fā)送數(shù)據(jù),使用組件上的特性或?qū)傩?。我們將我們的活?dòng)項(xiàng)目移動(dòng)到我們將針對(duì)每個(gè)項(xiàng)目運(yùn)行的項(xiàng)目中。本周,我們使用概念更新了由數(shù)據(jù)驅(qū)動(dòng)的組件。
本文轉(zhuǎn)載自:眾成翻譯
譯者:iOSDevLog
鏈接:http://www.zcfy.cc/article/3821
原文:https://www.fullstackreact.com/30-days-of-react/day-5/
我們的應(yīng)用程序中的硬編碼數(shù)據(jù)不是好主意。 今天,我們將把我們的組件設(shè)置為由數(shù)據(jù)驅(qū)動(dòng),訪問外部數(shù)據(jù)。
通過這一點(diǎn),我們已經(jīng)編寫了我們的第一個(gè)組件并將其設(shè)置為子/父關(guān)系。但是,我們還沒有將任何數(shù)據(jù)綁定到我們的React組件。雖然在React中寫一個(gè)網(wǎng)站是一個(gè)更愉快的體驗(yàn)(在我們看來),我們還沒有利用React的力量來顯示任何動(dòng)態(tài)數(shù)據(jù)。
今天我們來改一下。
數(shù)據(jù)驅(qū)動(dòng)回想一下,昨天我們構(gòu)建了包含頭和活動(dòng)列表的時(shí)間軸組件的開始:
我們將演示分解成組件,最終用靜態(tài)JSX模板構(gòu)建了三個(gè)獨(dú)立的組件。每當(dāng)我們改變網(wǎng)站的數(shù)據(jù)時(shí),不得不更新我們組件的模板是不方便的。
而是讓我們給出要使用的組件數(shù)據(jù)進(jìn)行顯示。我們從
讓我們告訴React,我們希望能夠?qū)?biāo)題設(shè)置為別的東西。
介紹屬性React允許我們以與HTML相同的語法向組件發(fā)送數(shù)據(jù),使用組件上的特性或 屬性。這類似于將 src 屬性傳遞給圖像標(biāo)簽。我們可以考慮 標(biāo)簽的屬性,因?yàn)閜rop我們正在設(shè)置調(diào)用的組件img。
我們可以訪問組件內(nèi)的這些屬性 this.props。讓我們看看在動(dòng)作中使用 props。
回想一下,我們將
class Header extends React.Component { render() { return () } }{this.props.title}
當(dāng)我們使用該
我們可以 title 作為一個(gè)屬性傳遞我們作為一個(gè)屬性,
在我們的組件內(nèi)部,我們可以 title 從課程中的 this.props 屬性訪問 Header。而不是像 Timeline 模板一樣靜態(tài)設(shè)置標(biāo)題,我們可以將其替換為傳入的屬性。
import React from "react" class Header extends React.Component { render() { return () } } export default Header{this.props.title}
現(xiàn)在我們的
結(jié)果四個(gè)
很漂亮,是嗎?現(xiàn)在我們可以復(fù)用
我們可以傳遞不僅僅是組件中的字符串。我們可以傳遞數(shù)字,字符串,各種對(duì)象,甚至功能!我們將進(jìn)一步討論如何定義這些不同的屬性,以便稍后構(gòu)建組件api。
我們來看內(nèi)容組件,并用數(shù)據(jù)變量而不是而不是靜態(tài)設(shè)置內(nèi)容和日期。就像我們可以使用HTML組件一樣,我們可以將多個(gè) props 組件傳遞給組件。
回想一下,昨天我們定義了我們的 Content 容器,如下所示:
class Content extends React.Component { render() { return ({/* Timeline item */}) } }{/* ... */}DougAn hour agoAte lunch
2
和我們 title 一樣,我們來看看 props 我們的 Content 組件需求:
用戶的頭像圖片
活動(dòng)的時(shí)間戳
活動(dòng)項(xiàng)的文字
評(píng)論數(shù)量
假設(shè)我們有一個(gè)代表活動(dòng)項(xiàng)目的JavaScript對(duì)象。我們將有一些字段,如字符串字段(文本)和日期對(duì)象。我們可能會(huì)有一些嵌套的對(duì)象 user 和 comments。例如:
{ timestamp: new Date().getTime(), text: "Ate lunch", user: { id: 1, name: "Nate", avatar: "http://www.croop.cl/UI/twitter/images/doug.jpg" }, comments: [ { from: "Ari", text: "Me too!" } ] }
就像我們將一個(gè)字符串標(biāo)題傳遞給
為了將動(dòng)態(tài)變量的值傳遞給一個(gè)模板,我們必須使用模板語法在我們的模板中呈現(xiàn)。例如:
import React from "react" class Content extends React.Component { render() { const {activity} = this.props; // ES6 destructuring return ({/* Timeline item */}) } } export default Content{activity.user.name}{activity.timestamp}{activity.text}
{activity.comments.length}
我們?cè)谖覀兊念惗x中使用了一點(diǎn)ES6,在第一行定義就是這個(gè)render() 的解構(gòu)函數(shù)。以下兩行在功能上相當(dāng):
// these lines do the same thing const activity = this.props.activity; const {activity} = this.props;
解構(gòu)使我們能夠以更短,更緊湊的方式節(jié)省打字和定義變量。
然后,我們可以通過傳遞一個(gè)對(duì)象作為支持而不是硬編碼的字符串來_使用_這個(gè)新內(nèi)容。例如:
太棒了,現(xiàn)在我們有一個(gè)由一個(gè)對(duì)象驅(qū)動(dòng)的活動(dòng)項(xiàng)。但是,您可能已經(jīng)注意到,我們將不得不使用不同的注釋實(shí)現(xiàn)這個(gè)多次。相反,我們可以將一組對(duì)象傳遞到組件中。
假設(shè)我們有一個(gè)包含多個(gè)活動(dòng)項(xiàng)目的對(duì)象:
const activities = [ { timestamp: new Date().getTime(), text: "Ate lunch", user: { id: 1, name: "Nate", avatar: "http://www.croop.cl/UI/twitter/images/doug.jpg" }, comments: [{ from: "Ari", text: "Me too!" }] }, { timestamp: new Date().getTime(), text: "Woke up early for a beautiful run", user: { id: 2, name: "Ari", avatar: "http://www.croop.cl/UI/twitter/images/doug.jpg" }, comments: [{ from: "Nate", text: "I am so jealous" }] }, ]
我們可以
但是,如果我們刷新視圖什么都不會(huì)出現(xiàn)!我們需要先更新我們的 Content 組件以接受多個(gè)活動(dòng)。正如我們以前了解到的,JSX真的只是由瀏覽器執(zhí)行的JavaScript。我們可以在JSX內(nèi)容中執(zhí)行JavaScript函數(shù),因?yàn)樗鼘⑾駷g覽器的JavaScript一樣運(yùn)行。
我們將我們的活動(dòng)項(xiàng)目 JSX 移動(dòng) map 到我們將針對(duì)每個(gè)項(xiàng)目運(yùn)行的項(xiàng)目中。
import React from "react" class Content extends React.Component { render() { const {activities} = this.props; // ES6 destructuring return ({/* Timeline item */} {activities.map((activity) => { return () } } export default Content); })}{activity.user.name}{activity.timestamp}{activity.text}
{activity.comments.length}
現(xiàn)在我們可以將任何數(shù)量的活動(dòng)傳遞給我們的數(shù)組,Content 組件將處理它,但是如果我們現(xiàn)在離開組件,那么我們將有一個(gè)相對(duì)復(fù)雜的組件處理,包含和顯示活動(dòng)列表。像這樣離開真的不是React的方式。
活動(dòng)項(xiàng)這里寫一個(gè)組件包含顯示單個(gè)活動(dòng)項(xiàng)然后再建立一個(gè)復(fù)雜的 Content 組件是有意義的,我們可以移動(dòng)責(zé)任。這也將使測(cè)試更容易,添加功能等
讓我們更新我們的 Content 組件以顯示組件列表 ActivityItem(我們將在下面創(chuàng)建)。
import React from "react" import ActivityItem from "./ActivityItem"; class Content extends React.Component { render() { const {activities} = this.props; // ES6 destructuring return ({/* Timeline item */} {activities.map((activity) => () } } export default Content))}
這不僅僅是簡(jiǎn)單易懂,而且使得這兩個(gè)組件的測(cè)試更容易。
使用我們新鮮的 Content 組件,讓我們創(chuàng)建 ActivityItem 組件。由于我們已經(jīng)為此創(chuàng)建了視圖 ActivityItem,所以我們需要做的就是將它從我們 Content 組件的模板復(fù)制為自己的模塊。
import React from "react" class ActivityItem extends React.Component { render() { const {activity} = this.props; // ES6 destructuring return () } } export default ActivityItem{activity.user.name}{activity.timestamp}{activity.text}
{activity.comments.length}
本周,我們使用React props 概念更新了由數(shù)據(jù)驅(qū)動(dòng)的組件。在下一節(jié)中,我們將介紹有狀態(tài)的組件。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84589.html
摘要:今天我們將討論創(chuàng)建組件的最終方案,即無狀態(tài)函數(shù)的純組件。今天我們正在研究一種處理提出的復(fù)雜數(shù)據(jù)的方法,稱為體系結(jié)構(gòu)。第天部署介紹今天,我們將探討部署我們的應(yīng)用所涉及的不同部分,以便外界可以使用我們的應(yīng)用。 本文轉(zhuǎn)載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3758原文:https://www.fullstackreact.com/3...
摘要:我們的應(yīng)用由一個(gè)單一的元素組成。讓我們通過構(gòu)建我們的第一個(gè)組件來開始接觸這個(gè)力量。我們將把組件寫成類。讓我們來看一個(gè)我們要調(diào)用的組件。然而,什么都不會(huì)在屏幕上呈現(xiàn)。 本文轉(zhuǎn)載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3799原文:https://www.fullstackreact.com/30-days-of-react/day-...
摘要:本文轉(zhuǎn)載自眾成翻譯譯者鏈接原文我們做到了第天。歡迎來到最后一天恭喜你做到了我們此行的最后一個(gè)部分是通過參與。反應(yīng)社區(qū)是活躍成長(zhǎng)和友好的。 本文轉(zhuǎn)載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3800原文:https://www.fullstackreact.com/30-days-of-react/day-30/ 我們做到了!第30天...
摘要:本文轉(zhuǎn)載自眾成翻譯譯者鏈接原文太棒了,我們已經(jīng)構(gòu)建了第一個(gè)組件。天前一章節(jié),我們開始構(gòu)建我們的第一個(gè)組件。內(nèi)容部分內(nèi)有個(gè)不同的項(xiàng)目組件。決定劃分組件的深度比科學(xué)更顯得藝術(shù)。子組件當(dāng)組件嵌套在另一個(gè)組件中時(shí),它被稱為子組件。 本文轉(zhuǎn)載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3817原文:https://www.fullstackre...
摘要:無論何時(shí)狀態(tài)改變通過,組件將重新投遞。在調(diào)用函數(shù)之后,我們可以將第二個(gè)參數(shù)傳遞給函數(shù),該函數(shù)將在狀態(tài)更新后保證被調(diào)用。今天,我們更新了我們的組件以使其處于狀態(tài)狀態(tài),現(xiàn)在有必要處理如何使組件成為狀態(tài)。 本文轉(zhuǎn)載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3824原文:https://www.fullstackreact.com/30-d...
閱讀 2159·2023-04-26 00:38
閱讀 1943·2021-09-07 10:17
閱讀 897·2021-09-02 15:41
閱讀 646·2021-08-30 09:45
閱讀 552·2019-08-29 17:25
閱讀 3220·2019-08-29 15:07
閱讀 2199·2019-08-29 12:52
閱讀 3742·2019-08-26 13:35