gpt4 book ai didi

reactjs - 选项卡仅在第一次激活时安装选项卡内容

转载 作者:行者123 更新时间:2023-12-03 13:54:31 24 4
gpt4 key购买 nike

我只想在第一次激活时加载选项卡内容,之后内容保留在 DOM 中

这就是我所拥有的

  <Tabs defaultActiveKey={1} animation={false} id="my-tabs" mountOnEnter unmountOnExit>
<Tab eventKey={1}>
<div>content1</div>
</Tab>
<Tab eventKey={2}>
<div>content1</div>
</Tab>
</Tabs>

它工作正常,但切换选项卡之间存在延迟,因为我拥有的内容相当大,并且我只想在选项卡第一次激活时渲染一次。

有办法实现吗?我正在使用 react-bootstrap 0.30.10

最佳答案

更新:

显然mountOnEnter必须与animation一起使用,否则它将无法按预期工作。我进行了更改,现在效果很好

旧答案:

所以我想出了这个包装组件,如下

class TabsLazyLoad extends Component {

constructor(props) {
super(props);
this.state = this.getInitialState();
this.handleSelect = this.handleSelect.bind(this);
}

getInitialState() {
return {
key: this.props.key || this.props.defaultActiveKey,
rendered: [],
};
}

addRenderedTab(key) {
const newState = _.cloneDeep(this.state);
newState.rendered.push(key);
this.setState(newState);
}

handleSelect(key) {
this.setState({ key });
}

render() {
return (
<Tabs activeKey={this.state.key} onSelect={this.handleSelect} {...this.props}>
{_.map(this.props.children, (tabComponent) => {
if (_.includes(this.state.rendered, tabComponent.props.eventKey)) {
return tabComponent;
}
if (tabComponent.props.eventKey === this.state.key) {
this.addRenderedTab(this.state.key);
}

// if it's not rendered, return an empty tab
const emptyTab = _.cloneDeep(tabComponent);
emptyTab.props.children = null;
return emptyTab;
})}
</Tabs>
);
}
}

TabsLazyLoad.propTypes = Tabs.propTypes;

它似乎工作正常,但我认为这有点hacky,但这是我目前能想到的最好的。

关于reactjs - 选项卡仅在第一次激活时安装选项卡内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44792720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com