使用react-sensitive-tabs时更新React组件

时间:2019-05-08 09:27:36

标签: javascript reactjs laravel

在我的react应用程序中,当我进行服务器端更新时,我返回一个响应,该响应用于更新父组件的状态。但是对于我使用react-响应选项卡的组件,它们不会更新。 这是我的反应代码:

import React, {Component, Fragment} from 'react';
import ReactCSSTransitionGroup from 'react-addons-css-transition-group';

import PageTitle from '../../../Layout/AppMain/PageTitle';

import {
    faAngleUp,
    faAngleDown,
    faCommentDots,
    faBullhorn,
    faBusinessTime,
    faCog
} from '@fortawesome/free-solid-svg-icons';

import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';

import Tabs from 'react-responsive-tabs';

import Roles from './Roles';
import Priviledges from './Priviledges';

export default class Apage extends Component {

    constructor(props) {
        super(props);

        this.state = {
            api: this.props.api,
            session: this.props.session
        }
    }

    componentWillMount() {
        this.tabsContent = [
            {
                title: 'Roles',
                content: <Roles api={this.state.api} session={this.state.session} />
            },
            {
                title: 'Priviledges',
                content: <Priviledges api={this.state.api} session={this.state.session} />
            }
        ];
    }

    getTabs() {
        return this.tabsContent.map((tab, index) => ({
            title: tab.title,
            getContent: () => tab.content,
            key: index,
        }));
    }

    onTabChange = selectedTabKey => {
        this.setState({ selectedTabKey });
    };


    render() {

        return (
            <Fragment>
                    <PageTitle
                        heading="Roles & Priviledges"
                        subheading=""
                        icon="lnr-apartment icon-gradient bg-mean-fruit"
                    />
                    <Tabs selectedTabKey={this.state.selectedTabKey} onChange={this.onTabChange} tabsWrapperClass="body-tabs body-tabs-layout" transform={false} showInkBar={true} items={this.getTabs()}/>
            </Fragment>
        )
    }
}

我尝试在<Roles />标签中使用它:

shouldComponentUpdate(nextProps, nextState) {
   return nextProps.session!= this.props.session;
}

但是我无法为我工作。有什么线索吗? 我正在使用laravel-mix在laravel中运行我的React JS。实际上,我打算每次使用setState提交表单时都更新一个下拉列表。当我使用React JS作为REST API时,我已经做过很多次了。

2 个答案:

答案 0 :(得分:1)

在服务器收到响应后,我最终使用套接字IO触发了组件中的setSate。尽管我更喜欢整洁的东西。

答案 1 :(得分:0)

您需要像这样的onChange-onChange={() => this.onTabChange()}

请参阅下文

<Tabs onChange={() => this.onTabChange()} selectedTabKey={this.state.selectedTabKey}  tabsWrapperClass="body-tabs body-tabs-layout" transform={false} showInkBar={true} items={this.getTabs()}/>