React組件對(duì)子組件children進(jìn)行加強(qiáng)的方法
問題
如何對(duì)組件的children進(jìn)行加強(qiáng),如:添加屬性、綁定事件,而不是使用<div>{this.props.children}</div>在<div>上進(jìn)行處理。
前車之鑒
今天寫組件遇到這個(gè)問題,在網(wǎng)上查閱了很多資料,都說可以使用React.cloneElement進(jìn)行處理,但是結(jié)果并不是預(yù)期想要的。
先看看這個(gè)東西有什么用:
React.cloneElement(element, [props], [...childrn])
根據(jù)React官網(wǎng)的說法,以上代碼等價(jià)于:
<element.type {...element.props} {...props}>{children}</element.type>
這么做其實(shí)也是給children包了一層標(biāo)簽,再對(duì)其進(jìn)行間接處理,沒有直接修改children。
如:
// App.jsx
<Father>
<div style={{ color: 'red' }} onClick={() => console.log('hello')}>
demo
</div>
<Father>
我們希望在Father.jsx的內(nèi)部將div轉(zhuǎn)為inline-block。按照網(wǎng)上的做法,是這樣的:
// Father.jsx
const Son = React.cloneElement(
this.props.children,
{
style: {
display: 'inline-block'
}
}
)
但是實(shí)際效果是這樣的:
<div style={{ dispaly: 'inline-block' }}>
<div style={{ color: 'red' }} onClick={() => console.log('hello')}>
demo
</div>
<div>
哈???子元素的父元素被設(shè)為了inline-block,和我們想要的<div>demo</div>被設(shè)為inline-block。結(jié)果與預(yù)期完全不同,簡直大失所望?。。?/p>
React.clone根本對(duì)不起它c(diǎn)lone的名字?。?!
自我探索
思路: jsx語法表示的元素只是react組件的一個(gè)語法糖。所以組件是對(duì)象。既然是對(duì)象我們就可以直接對(duì)其進(jìn)行修改。
嘗試在控制臺(tái)打印一個(gè)如下react組件:
// this.props.children
console.log(
<div
style={{ color: 'red' }}
onClick={() => {
console.log('hello');
}}
>
demo
</div>
);
如下:

所以直接修改this.props.children即可:
// Father.jsx
const { children } = this.props;
const Son = {
...children,
props: {
...children.props,
dispaly: {
...children.style,
display: 'inline-block'
},
onTransitionEnd: () => { console.log('hello world') }
}
}
總結(jié)
如何對(duì)組件的children進(jìn)行直接加強(qiáng),直接修改this.props.children對(duì)象即可。
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
如何對(duì)react hooks進(jìn)行單元測試的方法
這篇文章主要介紹了如何對(duì)react hooks進(jìn)行單元測試的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
React如何實(shí)現(xiàn)視頻旋轉(zhuǎn)縮放
這篇文章主要為大家詳細(xì)介紹了React如何實(shí)現(xiàn)視頻旋轉(zhuǎn)縮放功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
React Native使用Modal自定義分享界面的示例代碼
本篇文章主要介紹了React Native使用Modal自定義分享界面的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
在React項(xiàng)目中使用TypeScript詳情
這篇文章主要介紹了在React項(xiàng)目中使用TypeScript詳情,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
React將組件作為參數(shù)進(jìn)行傳遞的3種方法實(shí)例
其實(shí)react組件之間傳遞參數(shù)是比較簡單的,組件傳入?yún)?shù)的一種方式,下面這篇文章主要給大家介紹了關(guān)于React將組件作為參數(shù)進(jìn)行傳遞的3種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
react-navigation 如何判斷用戶是否登錄跳轉(zhuǎn)到登錄頁的方法
本篇文章主要介紹了react-navigation 如何判斷用戶是否登錄跳轉(zhuǎn)到登錄頁的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12

