區別:props是傳遞給元件的(類似函數的形參),而state是在元件內部被元件自己管理的(類似於在一個函數內宣告的變數)。 state是元件自己管理數據,控制自己的狀態,可變;props是外部傳入的資料參數,不可變。
本教學操作環境:Windows7系統、react18版、Dell G3電腦。
相關推薦:《React影片教學》
#props
React的核心思想就是組件化思想,頁面會被切割成一些獨立的、可重複使用的元件。
元件在概念上就是一個函數,可以接受一個參數作為輸入值,這個參數就是props
,所以可以把props
理解為從外部傳入組件內部的數據。由於React是單向資料流,所以props
基本上也就是從服父級元件傳遞給子元件的資料。
用法
假設我們現在需要實作一個列表,根據React元件化思想,我們可以把列表中的行當做一個元件,也就是有這樣兩個組件:<itemlist></itemlist>
和<item></item>
。
先看看<itemlist></itemlist>
import Item from "./item"; export default class ItemList extends React.Component{ const itemList = data.map(item => <Item item=item />); render(){ return ( {itemList} ) } }
清單的資料我們就暫時先假設是放在一個data
變數中,然後透過map
函數傳回一個每一項都是<item item="資料"></item>
的數組,也就是說這裡其實包含了data.length
個<item></item>
元件,資料透過在元件上自訂一個參數傳遞。當然,這裡想傳遞幾個自訂參數都可以。
在<item></item>
中是這樣的:
export default class Item extends React.Component{ render(){ return ( <li>{this.props.item}</li> ) } }
在render
函數中可以看出,元件內部是使用this.props
來取得傳遞到該元件的所有數據,它是一個對象,包含了所有你對這個元件的配置,現在只包含了一個item
屬性,所以透過this.props.item
來取得即可。
只讀性
props
經常被用作渲染元件和初始化狀態,當一個元件被實例化之後,它的props
是唯讀的,不可改變的。如果props
在渲染過程中可以被改變,會導致這個元件顯示的形態變得無法預測。只有透過父元件重新渲染的方式才可以把新的props
傳入元件中。
預設參數
在元件中,我們最好為props
中的參數設定一個defaultProps
,並且制定它的類型。例如,這樣:
Item.defaultProps = { item: 'Hello Props', }; Item.propTypes = { item: PropTypes.string, };
關於propTypes
,可以宣告為下列幾種型別:
optionalArray: PropTypes.array, optionalBool: PropTypes.bool, optionalFunc: PropTypes.func, optionalNumber: PropTypes.number, optionalObject: PropTypes.object, optionalString: PropTypes.string, optionalSymbol: PropTypes.symbol,
總結
props
是一個從外部傳入元件的參數,主要作為就是從父元件向子元件傳遞數據,它具有可讀性和不變性,只能透過外部元件主動傳入新的props
來重新渲染子元件,否則子元件的props
以及展現形式不會改變。
state
state
是什麼呢?
State is similar to props, but it is private and fully controlled by the component.
一個元件的顯示形態可以由資料狀態和外部參數決定,外部參數也就是props
,而資料狀態就是state
用法
export default class ItemList extends React.Component{ constructor(){ super(); this.state = { itemList:'一些数据', } } render(){ return ( {this.state.itemList} ) } }
首先,在元件初始化的時候,透過this.state
給元件設定一個初始的state
,在第一次render
的時候就會用這個資料來渲染元件。
setState
state
不同於props
的一點是,state
是可以改變的。不過,不可以直接透過this.state=
的方式來修改,而需要透過this.setState()
方法來修改state
。
例如,我們經常會透過非同步操作來取得數據,我們需要在didMount
階段來執行非同步操作:
componentDidMount(){ fetch('url') .then(response => response.json()) .then((data) => { this.setState({itemList:item}); } }
當資料取得完成後,透過this.setState
來修改資料狀態。
當我們呼叫this.setState
方法時,React會更新元件的資料狀態state
,並且重新呼叫render
方法,也就是會對元件進行重新渲染。
注意:透過this.state=
來初始化state
,使用this.setState
來修改state
,constructor
是唯一能夠初始化的地方。
setState
接受一個物件或函數作為第一個參數,只需要傳入需要更新的部分即可,不需要傳入整個對象,例如:
export default class ItemList extends React.Component{ constructor(){ super(); this.state = { name:'axuebin', age:25, } } componentDidMount(){ this.setState({age:18}) } }
在执行完setState
之后的state
应该是{name:'axuebin',age:18}
。
setState
还可以接受第二个参数,它是一个函数,会在setState
调用完成并且组件开始重新渲染时被调用,可以用来监听渲染是否完成:
this.setState({ name:'xb' },()=>console.log('setState finished'))
总结
state
的主要作用是用于组件保存、控制以及修改自己的状态,它只能在constructor
中初始化,它算是组件的私有属性,不可通过外部访问和修改,只能通过组件内部的this.setState
来修改,修改state
属性会导致组件的重新渲染。
区别
props
是传递给组件的(类似于函数的形参),而state
是在组件内部被组件自己管理的(类似于在一个函数内声明的变量)state
是组件自己管理数据,控制自己的状态,可变;props
是外部传入的数据参数,不可变;没有
state
的叫做无状态组件,有state
的叫做有状态组件;多用
props
,少用state
。也就是多写无状态组件。
更多编程相关知识,请访问:编程教学!!
以上是react中state和props的差別有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版
中文版,非常好用

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能