最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用react遍歷對(duì)象生成dom

 更新時(shí)間:2023年01月17日 08:59:14   作者:apple_2021  
這篇文章主要介紹了使用react遍歷對(duì)象生成dom問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

react遍歷對(duì)象生成dom

項(xiàng)目場(chǎng)景

目前有一個(gè)需求,是要接收后臺(tái)返回的一個(gè)對(duì)象,并且遍歷他的屬性和值顯示到頁(yè)面上,因?yàn)樵搶?duì)象表示的是自定義參數(shù),每一次都不一樣,所以記錄一下;

問(wèn)題描述

之前最常用的map是方法是用來(lái)遍歷數(shù)組的。

const arr = [a, b, c]
render(){
  return (
	<div>
	{
		arr.map((item,index)=>{
			return (
			  <div key={index}>{item}</div>
			)
		 })
	}
	</div>
  )
}

那對(duì)象的話,怎么遍歷呢?

API: Object.keys()

作用:遍歷對(duì)象中的屬性

所以我們可以通過(guò)Object.keys(obj)來(lái)獲取該對(duì)象的所有屬性,根據(jù)這個(gè)數(shù)組的map方法生成相應(yīng)的dom節(jié)點(diǎn),代碼如下:

const obj = {
	a: [1,2,3],
	b: [4,5,6]
}

Object.keys(obj).map((element,index)=>{
	return (
		<div key={index}>
			<div>{element}</div>
			element.map((item,i)=>{
				return (
					<div key={i}>{item}</div>
				)
			})
		</div>
	)
})

不要著急,繼續(xù)往下看,還可能遇到個(gè)小坑

補(bǔ)充

看下面的代碼,看看你能否發(fā)現(xiàn)問(wèn)題

 // field為接口字段,屬性個(gè)數(shù)不確定。
 // 例如: field = { a: "123", model: "text", ... } 
 <Descriptions 
 	title="自定義參數(shù)" 
 	size="middle" 
 	labelStyle={{ color:"#999" }} 
 	style={{ overflowY: "auto", maxHight: "160px" }}
 >
	{/* <pre >{JSON.stringify(field,null,2)}</pre> */}
	{
	  Object.keys(field).map((name)=>{
	    return <Descriptions.Item label={name}>{field.name}</Descriptions.Item>
	  })
	}
	</Descriptions>

這段代碼在頁(yè)面展示的時(shí)候,只展示屬性,那么為什么不展示值呢,這個(gè)就得從對(duì)象的點(diǎn)和中括號(hào)的區(qū)別說(shuō)起了。

下面選自《你不知道的JavaScript(上卷)》

簡(jiǎn)單的說(shuō)就是:

  • 中括號(hào)法可以用變量作為屬性名,而點(diǎn)方法不可以;
  • 中括號(hào)法可以用數(shù)字作為屬性名,而點(diǎn)語(yǔ)法不可以;
  • 中括號(hào)法可以使用js的關(guān)鍵字和保留字作為屬性名,而點(diǎn)語(yǔ)法不可以 (盡量避免在變量或者屬性中使用關(guān)鍵字或保留字);

react中操作dom

當(dāng)我們?cè)趓eact中需要做一些dom操作時(shí),就會(huì)使用到react給我們預(yù)留的“后門(mén)”。

之所以稱之為“后門(mén)”,是因?yàn)楫?dāng)前流行框架react/vue出現(xiàn)的目的就是避免操作dom,造成渲染浪費(fèi)。然而很多時(shí)候不能不操作dom。

1、通過(guò)React.createRef()/useRef();來(lái)創(chuàng)建一個(gè)ref變量。

// 類組件中
constructor (props) {
? ? super(props);
? ? this.myRef = React.createRef();
}
// 函數(shù)組件中(使用hooks)
const myRef = useRef();

2、在對(duì)應(yīng)的dom節(jié)點(diǎn)上寫(xiě)入ref。

// 類組件
<div className="t-box scroll-bar" ref={this.myRef}>
?? ?...
</div>

// 函數(shù)組件
<div className="t-box scroll-bar" ref={myRef}>
?? ?...
</div>

3、使用react-dom中的findDomNode()得到具體的dom。

import ReactDom from 'react-dom';
// 類組件
const getTargetDOM = ReactDom.findDOMNode(this.myRef.current);
// 函數(shù)組件
const getTargetDOM = ReactDom.findDOMNode(myRef.current);

4、根據(jù)獲取的dom進(jìn)行一些dom操作即可。例如操作js盒模型、設(shè)置文字樣式等等。

// 設(shè)置向上滾動(dòng)距離
getTargetDOM.scrollTop = 1000;
getTargetDOM.style.color = 'red';

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

苏尼特右旗| 太仆寺旗| 嘉黎县| 兴安盟| 琼结县| 汕尾市| 南宫市| 定南县| 连州市| 嘉峪关市| 威信县| 读书| 江华| 镇宁| 和顺县| 大兴区| 双鸭山市| 娄底市| 广丰县| 樟树市| 鄢陵县| 沽源县| 商都县| 合川市| 上思县| 上饶县| 陇南市| 新田县| 青岛市| 福鼎市| 天祝| 沐川县| 高阳县| 镇沅| 嘉定区| 江永县| 体育| 博乐市| 铜鼓县| 枞阳县| 宁乡县|