Yakın zamanda React'i öğrenmeye başladım ve bilgimin ne kadar ileri gittiğini görmek için bir sekme oluşturmak istedim. Bununla karşılaştım ve redux olmadan bir şey uygulamaya karar verdim. Cevapların operasyonun neyi başarmak istediğini yansıtmadığını hissediyorum. Sadece bir aktif bileşen istiyor, ancak buradaki cevaplar tüm bileşenleri aktif hale getirecek. Bir şans verdim.
Aşağıda bir sekme dosyası var
import React, { Component } from 'react';
class Tab extends Component {
render(){
const tabClassName = "col-xs-3 tab-bar";
const activeTab = this.props.activeKey === this.props.keyNumber ? "active-tab" : null;
return (
<div
className = {`${tabClassName} ${activeTab}`}
onClick={()=>this.props.onClick(this.props.keyNumber)}
>
I am here
</div>
);
}
}
export default Tab;
Sekmeler dosyası ...
import React, { Component } from 'react';
import Tab from './tab';
class Tabs extends Component {
constructor(props){
super(props);
this.state = {
currentActiveKey: 0,
tabNumber: 2
};
this.setActive = this.setActive.bind(this);
this.setTabNumber = this.setTabNumber.bind(this);
}
setTabNumber(number){
this.setState({
tabNumber: number
});
}
setActive (key){
this.setState({
currentActiveKey: key
});
}
render(){
let tabs = [];
for(let i = 0; i <= this.state.tabNumber; i++){
let tab = <Tab key={i} keyNumber={i} onClick={this.setActive} activeKey={this.state.currentActiveKey}/>;
tabs.push(tab);
}
return (
<div className="row">
{tabs}
</div>
);
}
}
export default Tabs;
dizin dosyanız ...
import React from 'react';
import ReactDOM from 'react-dom';
import Tabs from './components/tabs';
ReactDOM.render(
<Tabs />
, document.querySelector('.container'));
ve css
.tab-bar {
margin: 10px 10px;
border: 1px solid grey;
}
.active-tab {
border-top: 1px solid red;
}
Bu, üzerinde geliştirmek istediğim bir şeyin iskeletidir, bu nedenle tabNumber'ı 4'ün üzerine çıkarmak css'i bozacaktır.