【发布时间】:2015-09-18 21:07:06
【问题描述】:
在尝试使用 React 时,我遇到了架构问题。我想使用 React JS 以最可重用的方式切换选项卡。
因此,理想情况下,我正在寻找一种方法,在单击 TabHeading 时,我会停用 TabHeader 标题中的其他 TabHeadings,并在 TabContent 中激活相应的 TabPane(来自 this.props.target)。
$(".tab-pane").hide();
$(React.findDOMNode(this.props.target)).show();
我想避免上述解决方案。我不想在任何地方使用类名,或者将父组件作为道具传递。Angular 有 $parent 或某种变量来调用父组件上的函数,对吗?有没有类似的方法没有明确传递父母?有没有办法和兄弟姐妹交流?请帮忙。
<Tabs>
<TabHeader>
<TabHeading active="active" target={self.refs.pane1}>
Heading 1
</TabHeading>
<TabHeading target={self.refs.pane2}>
Heading 2
</TabHeading>
</TabHeader>
<TabContent>
<TabPane active="active" ref="pane1">
Pane 1
</TabPane>
<TabPane ref="pane2">
Pane 2
</TabPane>
</TabContent>
</Tabs>
JS 文件
var React = require("react");
var $ = require("jquery");
var TabHeader = React.createClass({
render: function(){
return(
<div className="tab-header">
{this.props.children}
</div>
);
}
});
var TabHeading = React.createClass({
componentDidMount : function(){
},
handleClick : function(e){
//something to set siblings to inactive
//this.props.active="active";
// this.props.target.props.active = "active";
},
render: function(){
return(
<div className="tab-heading" onClick={this.handleClick} >
{this.props.children}
</div>
);
}
});
var TabContent = React.createClass({
render: function(){
return(
<div className="tab-content">
{this.props.children}
</div>
);
}
});
var TabPane = React.createClass({
componentDidMount:function(){
console.log(this.props.children);
},
render: function(){
return(
<div className="tab-pane">
{this.props.children}
</div>
);
}
});
var Tabs = React.createClass({
componentDidMount:function(){
},
render: function(){
return(
<div className="tabs">
{this.props.children}
</div>
);
}
});
Tabs.TabHeader = TabHeader;
Tabs.TabHeading = TabHeading;
Tabs.TabContent = TabContent;
Tabs.TabPane = TabPane;
module.exports = Tabs;
【问题讨论】:
-
如果您将代码放入 jsbin/jsfiddle/codepen 会有所帮助,这样我们就可以破解它以获得答案:)
-
stackoverflow.com/q/22461129/368697 可能会回答您的问题。这也是关于使用 React 组件维护选项卡状态。
-
@ssorallen:很酷的答案。但是,我需要添加自定义 HTML,如果我采用这种方法会很困难。
标签: javascript reactjs