實現(xiàn)效果是一個菜單欄的點擊時展開子集菜單,再點擊縮起。
而且不止一個菜單。
代碼:
//點擊事件
clickFunc = (index) => {
}
// render...
{
list.map((item, index) => {
return (
<div key={index} className="menuBlock">
<div className="blockTitle" onClick={this.clickFunc.bind(this, index)} ref={'block'+index}>{item.blockTitle}</div>
<div className='blockList on' >
<ul>
{
item.arr.map((item, index) => {
return (
<li key={index}><a href={item.link} target="_blank">{item.text}</a></li>
);
})
}
</ul>
</div>
</div>
)
})
}
**目前我是打算通過增刪class名字來實現(xiàn),但是這樣我得拿到真實的dom,所以我想通過ref來拿到當(dāng)前點擊的dom,再通過它去找兄弟節(jié)點'blockList',給它添加class。
這里我用index來標(biāo)記不同的ref。
class名為‘blockList ’的是需要展開項**
問題:在點擊方法里我該怎么去拿到拼接了下標(biāo)標(biāo)量的ref值,或者有什么更好的方法來實現(xiàn)這個效果?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>React</title>
<script crossorigin src="https://s.zys.me/js/react/react.min.js"></script>
<script crossorigin src="https://s.zys.me/js/react/react-dom.min.js"></script>
<script crossorigin src="https://s.zys.me/js/react/babel.min.js"></script>
</head>
<body>
<div id="app"></div>
<script type="text/babel">
class TreeNode extends React.Component {
constructor(props){
super(props);
this.state = {status: props.data.status};
}
close(){
this.setState({status: 'close'})
}
open(){
this.setState({status: 'open'})
}
genChildren(){
if(this.state.status === 'close'){return null}
return this.props.data.children.map( o => <TreeNode data={o} />);
}
genName(){
return <span>{this.props.data.name}</span>
}
genIcon(){
if(this.state.status === 'open'){ return <span onClick={this.close.bind(this)}>-</span>}
return <span onClick={this.open.bind(this)}>+</span>
}
render(){
return (
<div style={{marginLeft: 20}}>
{this.genIcon()}
{this.genName()}
{this.genChildren()}
</div>
);
}
}
class Tree extends React.Component {
genTree(){
const data = [
{
name: '第一個', status: 'open', children: [
{name: '名字', status: 'close', children: [
{name: '名字', status: 'close', children: []},
{name: '名字', status: 'close', children: []},
{name: '名字', status: 'close', children: []}
]},
{name: '名字', status: 'close', children: []},
{name: '名字', status: 'close', children: []},
{name: '名字', status: 'close', children: []}
]
}
]
return data.map( o => <TreeNode data={o} />);
}
render(){
return <div>{this.genTree()}</div>
}
}
ReactDOM.render(<Tree />, document.getElementById('app'));
</script>
</body>
</html>
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。