React组件中对子组件children进行加强

React组件中对子组件children进行加强
问题
如何对组件的children进行加强,如:添加属性、绑定事件,而不是使用

{this.props.children}
上进行处理。

前车之鉴
今天写组件遇到这个问题,在网上查阅了很多资料,都说可以使用React.cloneElement进行处理,但是结果并不是预期想要的。

先看看这个东西有什么用:

React.cloneElement(element, [props], […childrn])
根据React官网的说法,以上代码等价于:

<element.type {…element.props} {…props}>{children}</element.type>
这么做其实也是给children包了一层标签,再对其进行间接处理,没有直接修改children。

如:

// App.jsx

<div style={{ color: ‘red’ }} onClick={() => console.log(‘hello’)}>
demo


我们希望在Father.jsx的内部将div转为inline-block。按照网上的做法,是这样的:

// Father.jsx
const Son = React.cloneElement(
this.props.children,
{
style: {
display: ‘inline-block’
}
}
)
但是实际效果是这样的:

React.clone根本对不起它clone的名字!!!

自我探索
思路: jsx语法表示的元素只是react组件的一个语法糖。所以组件是对象。既然是对象我们就可以直接对其进行修改。

尝试在控制台打印一个如下react组件:

// this.props.children
console.log(
<div
style={{ color: ‘red’ }}
onClick={() => {
console.log(‘hello’);
}}
>
demo

);
如下:

所以直接修改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’) }
}
}
总结
如何对组件的children进行直接加强,直接修改this.props.children对象即可。
http://www.hbzjk.net/szujcMOSi8ld/news/JGdWKk.html
http://www.hbzjk.net/szujgRR1TblN/news/bELM08.html
http://www.hbzjk.net/szujbNbACQFJ/news/0dbCQ4.html
http://www.hbzjk.net/szujPJAWnX9c/news/SENM8q.html
http://www.hbzjk.net/szujkJOXfSDJ/news/nDia4m.html
http://www.hbzjk.net/szujWkVP3i78/news/5cjeP2.html
http://www.hbzjk.net/szuj2S72Sb1f/news/LVfV5l.html
http://www.hbzjk.net/szujEXZYApZF/news/Gk0kQb.html
http://www.hbzjk.net/szujfJkjqgHR/news/QiiC5J.html
http://www.hbzjk.net/szujeeVCNXJX/news/YmQF1k.html
http://www.hbzjk.net/szujK8fAn5AB/news/mdkpHB.html
http://www.hbzjk.net/szujCI6EgQWn/news/khI8Td.html
http://www.hbzjk.net/szujFX14PUEX/news/XAm22K.html
http://www.hbzjk.net/szuj19q4YUfJ/news/2YTBB4.html
http://www.hbzjk.net/szujQ1RL2MoK/news/YGbrB3.html
http://www.hbzjk.net/szujpArOirId/news/jj5Ifd.html
http://www.hbzjk.net/szujJ7hIqQJT/news/hI3BFU.html
http://www.hbzjk.net/szujbFkCKBEk/news/BLNXZ7.html
http://www.hbzjk.net/szujY4T3GhAe/news/Xb1YSf.html
http://www.hbzjk.net/szujdnCpXm0K/news/0NLbko.html
http://www.hbzjk.net/szujaX1S0k7Q/news/O5qXFj.html
http://www.hbzjk.net/szujNEKed76l/news/lZU22d.html
http://www.hbzjk.net/szujGE59h391/news/njBDM7.html
http://www.hbzjk.net/szujjeYUnQE8/news/AJ3ndF.html
http://www.hbzjk.net/szujf6hI6in4/news/gaMlS1.html
http://www.hbzjk.net/szujir3mG62E/news/9pIaNR.html
http://www.hbzjk.net/szuj0lUf0Ge3/news/eRFSRj.html
http://www.hbzjk.net/szujnQTODYLi/news/IQ65h1.html
http://www.hbzjk.net/szujWfIX6DFe/news/aQoT9I.html
http://www.hbzjk.net/szujZB4SljOO/news/L9VBXW.html
http://www.hbzjk.net/szujX872P5DY/news/6Lajf2.html
http://www.hbzjk.net/szujd831EcAk/news/DgcRWl.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值