あなたのボタンがあなたのTabs
コンポーネントの外にあることは他の人からもわかりません。
コードサンプルの表示方法は、App
コンポーネントがTabs
コンポーネントである必要があります。Tabs
コンポーネントがTabsView
のようなものを代表すると仮定します。
app.js
import Tabs from './components/tabs';
<App>
<Tabs/>
</App>
tabs.js
class TabsView extends Component {
constructor(props){
super(props);
}
render(){
return(
<span>{this.props.currentTab}</span>
);
}
}
class Tabs extends Component {
constructor(props){
super(props);
this.state = {
currentTab: 0
}
}
handleOnClickPrev(){
this.setState({currentTab: currentTab--});
}
handleOnClickNext(){
this.setState({currentTab: currentTab++});
}
render(){
return(
<div>
<TabsView currentTab={this.state.currentTab}/>
<button id="prev" onClick={handleOnClickPrev.bind(this)}>-</button>
<button id="next" onClick={handleOnClickNext.bind(this)}>+</button>
</div>
);
}
}
export default Tabs;
この方法で、その中にあなたのコンポーネントの人生のすべての機能。 Tabs
コンポーネントには、必要なすべての情報が含まれています。それぞれのTabs
コンポーネントには独自の状態とタブがあります。現在のタブ状態がApp
から来て、他の場所でこの同じcurrentTabをレンダリングできるようにするには、App
コンポーネントから小道具として渡すことができます。
app.js
<App>
<Tabs currentTab={this.state.currentTab} handlePrev={} handleNext={}/>
</App>
tabs.js
class Tabs extends Component {
constructor(props){
super(props);
}
render(){
return(
<div>
<TabsView currentTab={this.props.currentTab}/>
<button id="prev" onClick={this.props.handlePrev}>-</button>
<button id="next" onClick={this.props.handleNext}>+</button>
</div>
);
}
}
export default Tabs;
あなたが他の場所でボタン特定の場所にタブを表示するために探していない場合は、使用することができますTabsView
コンポーネントは、Tabs
コンポーネントに渡す同じ小道具を使用しています。
app.js
<App>
<Tabs currentTab={this.state.currentTab} handlePrev={} handleNext={}/>
<TabsView currentTab={this.state.currentTab} />
</App>
あなたがコンポーネント自体よりも、別の場所でのライブのコンポーネントのためにあなたのコントロールを持つのは本当に暴勇している場合は、私は両方のTabsView
まで同じ小道具を渡すことを示唆しているとボタン。
app.js
handlePrev() {
this.setState({ currentTab: this.state.currentTab - 1 })
}
handleNext(){
...
}
render(){
return (
<App>
<TabsView currentTab={this.state.currentTab} />
<button id="prev" onClick={this.handlePrev.bind(this)}>-</button>
<button id="next" onClick={this.handleNext.bind(this)}>+</button>
</App>
)
}
私はあなたがこの時点でReduxのか、他の状態のライブラリを導入することは理にかなっているとは思いません。あなたのタブコンポーネントのためだけにグローバル状態を管理することは大変です。
いくつかの考えの後で、このアプローチはより「反応的」である。ありがとうございました!私はこの解決策に終わった。 <3 – Richard