将 href 添加到 url 时加载新组件
Load new component while adding href to url
我正在尝试实现一个系统,当单击导航栏中的项目时,它会在屏幕上加载一个新组件。我 运行 遇到了一个问题,使它成为一个新的 URL 并保持我的状态。让我澄清一下。
这是我的导航栏代码:
<Nav pullRight activeKey="1" onSelect={k => this.handleSelect(k)}>
<NavItem eventKey={1} href={'/component1'}>
Component 1
</NavItem>
<NavItem eventKey={2} href={'/component2'}>
Component 2
</NavItem>
</Nav>
这是我的 handleSelect 代码:
handleSelect(eventKey, event) {
this.setState({
componentToLoad: eventKey
});
event.preventDefault();
}
在我的渲染中我这样做:
render() {
if(this.state.componentToLoad === 'component1'){
return (<Component1/>);
} else if(this.props.componentToLoad === 'component2'){
return (<Component2/>);
}
我 运行 遇到的问题是因为 href 添加到 URL 页面重新加载,我失去了我的状态所以它总是加载组件 1 因为我将它设置为构造函数。如果我删除 href 它可以工作,但 URL 不是我想要的。
我如何让它加载我想要的组件,添加到 URL,并保持状态?
谢谢
如评论中所述,React Router 是满足您要求的不错选择。
Here's a codesandbox 使用 React Router,简单说明您描述的功能。
您也可以使用浏览器的 History API (see pushState method) to manipulate the URL directly without a page reload, although be aware that there are some differences in the api in modern browsers。
我正在尝试实现一个系统,当单击导航栏中的项目时,它会在屏幕上加载一个新组件。我 运行 遇到了一个问题,使它成为一个新的 URL 并保持我的状态。让我澄清一下。
这是我的导航栏代码:
<Nav pullRight activeKey="1" onSelect={k => this.handleSelect(k)}>
<NavItem eventKey={1} href={'/component1'}>
Component 1
</NavItem>
<NavItem eventKey={2} href={'/component2'}>
Component 2
</NavItem>
</Nav>
这是我的 handleSelect 代码:
handleSelect(eventKey, event) {
this.setState({
componentToLoad: eventKey
});
event.preventDefault();
}
在我的渲染中我这样做:
render() {
if(this.state.componentToLoad === 'component1'){
return (<Component1/>);
} else if(this.props.componentToLoad === 'component2'){
return (<Component2/>);
}
我 运行 遇到的问题是因为 href 添加到 URL 页面重新加载,我失去了我的状态所以它总是加载组件 1 因为我将它设置为构造函数。如果我删除 href 它可以工作,但 URL 不是我想要的。
我如何让它加载我想要的组件,添加到 URL,并保持状态?
谢谢
如评论中所述,React Router 是满足您要求的不错选择。 Here's a codesandbox 使用 React Router,简单说明您描述的功能。
您也可以使用浏览器的 History API (see pushState method) to manipulate the URL directly without a page reload, although be aware that there are some differences in the api in modern browsers。