reactjs – React JSX和FirstSibling或FirstChild

我正在尝试使用Reach JSX做一些与 JQuery一样简单的事情,但我无法在JSX中弄明白.我尽可能简化了示例,问题归结为:

我正在渲染一些标签页,我希望第一个标签使用特定的类名进行渲染,这样我就可以将其设置为不同的样式(默认选中的标签).

我的Html看起来像:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Tabs</title>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/react/0.11.1/react.js"></script>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/react/0.11.1/JSXTransformer.js"></script>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    </head>

    <body>
        <div id="content"></div>

        <script type="text/jsx" src="tabs.js"></script>

        <script type="text/jsx">
            /**
            * @jsx React.DOM
            */

            React.renderComponent(<Tabs><Tab title="Tab1"></Tab><Tab title="Tab2"></Tab></Tabs>,document.getElementById('content'));
       </script>
   </body>
</html>

我的JSX看起来像:

/**
  * @jsx React.DOM
 */

var Tab = React.createClass({
    render: function() {
        return (
          <li className="tab">
                {this.props.title}
          </li>
      );
    }
});

var Tabs = React.createClass({
    render: function() {
        return (
          <ul className="tabs">
                {this.props.children}
          </ul>
      );
    }
});

我想在第一个表上放一个类名,如“选中”或“活动”,但我无法弄清楚如何做到这一点.

有人可以帮忙吗?

解决方法

您说您要选择第一个选项卡并为其分配className.我认为它的解决方案相当简单,与此类似(我没有测试它):

React.renderComponent(<Tabs><Tab isSelected = true title="Tab1"></Tab><Tab title="Tab2"></Tab></Tabs>,document.getElementById('content'));

var Tab = React.createClass({
    render: function() {
        return (
          <li className={"tab " + (this.props.isSelected ? "selected" :"") }>
                {this.props.title}
          </li>
      );
    } });

但是看看你的用例,即你正在尝试实现一个tabs元素,我认为你应该实现一个Tabs组件来管理所选标签的当前状态.这是一个你可以开始的例子:

http://jsfiddle.net/kb3gN/7180/

var TabHeader = React.createClass({
    render: function() {
        return (
          <li className={"tabHeader " + this.props.className} 
                onClick={this.props.onClick}>
              {this.props.header}
          </li>
      );
    }
});

var TabContent = React.createClass({
    render: function() {
        return (
          <div className={"tabContent " + this.props.className}> 
              {this.props.content}
          </div>
      );
    }
});

var Tabs = React.createClass({

    getInitialState: function(){
        return {
            selectedTabNo : this.props.initialSelected ? this.props.initialSelected : 0
        }
    },getHeaderClass : function(i){
        return this.state.selectedTabNo == i ? "selected" : "";
    },getContentClass : function(i){
        return this.state.selectedTabNo == i ? "selected" : "hidden";
    },handleClick: function(i,e){
        this.setState({selectedTabNo:i});
        e.preventDefault();
    },render: function() {

      var headers = [];
      var i = 0;

      this.props.tabs.forEach(function(tab){
          headers.push(<TabHeader header={ tab.header } 
                             key={"tab"+i}
                             onClick = {this.handleClick.bind(this,i)}
                             className = {this.getHeaderClass(i)} />);
          i++;
      }.bind(this));

      var contents = [];
      i=0;
      this.props.tabs.forEach(function(tab){
          contents.push(<TabContent content={ tab.content } 
                                    key={"content"+i}
                                    className = {this.getContentClass(i)} />);
          i++;
      }.bind(this));


      return (
          <div className="tabsContainer">
              <ul className="tabHeadings">
                {headers}
              </ul>
              {contents}
          </div>    
      );
    }
});

var App = React.createClass({
    render: function() {
        return( <Tabs initialSelected={2} 
                      tabs={[{header:"step1",content:<div>This is page 1</div>},{header:"step2",content:<div>This is page 2</div>},{header:"step3",content:<div>This is page 3</div>} ]} /> );
   }
});

React.render(<App />,document.body);

相关文章

react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接...
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc ...