在我的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时,我已经做过很多次了。
答案 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()}/>