reactjs 如何调用在react-bootstrap中更改的选项卡上的事件

jhkqcmku  于 2023-02-08  发布在  React
关注(0)|答案(3)|浏览(128)

我已经使用React-Bootstrap在我的React应用程序中实现了导航选项卡。
就像这样:

<Tabs defaultActiveKey={1}>
    <Tab eventKey={1} title="Log in">
        {/* Irrelevant code */}
    </Tab>
    <Tab eventKey={2} title="Sign up">
        {/* Irrelevant code */}
    </Tab>
</Tabs>

现在,在更改选项卡时,我想调用以下函数:

changeTab(login) {
    if (login)
        this.setState({ heading: "Log in" })
    else
        this.setState({ heading: "Sign up" })
}

其中login是布尔值,当选择Log in选项卡时为true,当选择Sign up选项卡时为false
我该怎么做呢?

    • 编辑:**

我发现当你点击标签的时候你可以调用一个函数,如下所示:

<Tabs defaultActiveKey={1} onClick={()=>this.changeTab()}>
    <Tab eventKey={1} title="Log in">
        {/* Irrelevant code */}
    </Tab>
    <Tab eventKey={1} title="Sign up">
        {/* Irrelevant code */}
    </Tab>
</Tabs>

但是我怎么知道哪个标签被点击了呢?我需要它来根据哪个标签被点击来改变状态。

zbq4xfa0

zbq4xfa01#

您需要在Tabs组件中使用onSelect
就像这样:

<Tabs defaultActiveKey={1} onSelect={this.handleSelect()}>
    <Tab eventKey={1} title="Log in">
        {/* Irrelevant code */}
    </Tab>
    <Tab eventKey={2} title="Sign up">
        {/* Irrelevant code */}
    </Tab>
</Tabs>

然后将其作为handleSelect函数:

handleSelect(key) {
    if (key === 1)
        this.setState({ heading: "Log in" })
    else
        this.setState({ heading: "Sign up" })
}
sulc1iza

sulc1iza2#

<Tab.Container id="" defaultActiveKey={key} onSelect={this.handleSelect}>
   <Nav variant="tabs">
        <Nav.Item>
        <Nav.Link eventKey={'1'}>Staking</Nav.Link>
        </Nav.Item>

        <Nav.Item>
        <Nav.Link eventKey={'2'}>Providers</Nav.Link>
        </Nav.Item>

        <Nav.Item>
        <Nav.Link eventKey={'3'}>Overview</Nav.Link>
        </Nav.Item>
    </Nav>
    <Tab.Content>
        <Tab.Pane eventKey={'1'}>
         <Row>
             <Col>
              1111
             </Col>
         </Row>
        </Tab.Pane>
    </Tab.Content>
    <Tab.Content>
        <Tab.Pane eventKey={'2'}>
        <div>22222</div>
        </Tab.Pane>
    </Tab.Content>
    <Tab.Content>
        <Tab.Pane eventKey={'3'}>
        <div>333</div>
        </Tab.Pane>
    </Tab.Content>
 </Tab.Container>

现在在您的状态中添加初始值为“1”的“key”字段

constructor(props) {
    super(props);
    this.state = {
     key: '1'
    };
  }

然后写一个函数

handleSelect = (key) => {
      console.log(key,';;',typeof key)
      if(key === '1') {
          console.log('ll', key)
      } else if(key === '2') {
        console.log('ll', key)
      } else if(key === '3') {
        console.log('ll', key)
      }
  }

最初当页面加载时,不调用该函数,因此您可以在componentDidMount或任何其他函数中进行API调用或任何您想在第1个选项卡中进行的操作,并将其放置在第1个选项卡中,即我写的1111,之后当您单击另一个选项卡时,将调用handleSelect函数,并基于键值使用if..else语句为特定选项卡执行特定任务。
希望这能有所帮助。如果有任何问题,请让我们知道在评论部分。

xsuvu9jc

xsuvu9jc3#

在这里,你可以像Barry Michael Doyle说的那样使用onSelect。让我给你贴一个示例代码,让你更清楚它。

function Example() {

    return (
        <Tabs defaultActiveKey="home" id="uncontrolled-tab-example"
        className="mb-3" onSelect={(e) => handleClick(e)}>
        
            <Tab eventKey="homeTab" title="Home">
            </Tab>
            <Tab eventKey="profileTab" title="Profile">
            </Tab>
            <Tab eventKey="contactTab" title="Contact">
            </Tab>
            
        </Tabs>
    );

    function handleClick(e) {
        console.count(e);
        
        //result will be the eventKey of the tab you clicked on.
        
        // `homeTab` (when clicked on home tab)
        // `profileTab` (when clicked on profile tab)
        // `constactTab` (when clicked on Contact tab)
    }

}

相关问题