Load new component while adding href to url
I am trying to implement a system to when an item in the navbar is clicked it loads a new component on the screen. I am running into a problem making this a new URL and keeping my state. Let me clarify.
Here is my navbar code:
<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>
Here is my handleSelect code:
handleSelect(eventKey, event) {
this.setState({
componentToLoad: eventKey
});
event.preventDefault();
}
In my render I do this:
render() {
if(this.state.componentToLoad === 'component1'){
return (<Component1/>);
} else if(this.props.componentToLoad === 'component2'){
return (<Component2/>);
}
The problem I'm running into is because of the href adding to the URL the page reloads and I lose my state so it always loads component 1 because I set it to that in the constructor. If I remove the href it works, but the URL is not how I want it.
How do I get this to load the component I want, add to the URL, and keep the state?
Thank you
javascript reactjs navbar react-bootstrap react-state-management
add a comment |
I am trying to implement a system to when an item in the navbar is clicked it loads a new component on the screen. I am running into a problem making this a new URL and keeping my state. Let me clarify.
Here is my navbar code:
<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>
Here is my handleSelect code:
handleSelect(eventKey, event) {
this.setState({
componentToLoad: eventKey
});
event.preventDefault();
}
In my render I do this:
render() {
if(this.state.componentToLoad === 'component1'){
return (<Component1/>);
} else if(this.props.componentToLoad === 'component2'){
return (<Component2/>);
}
The problem I'm running into is because of the href adding to the URL the page reloads and I lose my state so it always loads component 1 because I set it to that in the constructor. If I remove the href it works, but the URL is not how I want it.
How do I get this to load the component I want, add to the URL, and keep the state?
Thank you
javascript reactjs navbar react-bootstrap react-state-management
3
Use a react router. No need to re-invent the wheel.
– charlietfl
Nov 20 '18 at 2:30
add a comment |
I am trying to implement a system to when an item in the navbar is clicked it loads a new component on the screen. I am running into a problem making this a new URL and keeping my state. Let me clarify.
Here is my navbar code:
<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>
Here is my handleSelect code:
handleSelect(eventKey, event) {
this.setState({
componentToLoad: eventKey
});
event.preventDefault();
}
In my render I do this:
render() {
if(this.state.componentToLoad === 'component1'){
return (<Component1/>);
} else if(this.props.componentToLoad === 'component2'){
return (<Component2/>);
}
The problem I'm running into is because of the href adding to the URL the page reloads and I lose my state so it always loads component 1 because I set it to that in the constructor. If I remove the href it works, but the URL is not how I want it.
How do I get this to load the component I want, add to the URL, and keep the state?
Thank you
javascript reactjs navbar react-bootstrap react-state-management
I am trying to implement a system to when an item in the navbar is clicked it loads a new component on the screen. I am running into a problem making this a new URL and keeping my state. Let me clarify.
Here is my navbar code:
<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>
Here is my handleSelect code:
handleSelect(eventKey, event) {
this.setState({
componentToLoad: eventKey
});
event.preventDefault();
}
In my render I do this:
render() {
if(this.state.componentToLoad === 'component1'){
return (<Component1/>);
} else if(this.props.componentToLoad === 'component2'){
return (<Component2/>);
}
The problem I'm running into is because of the href adding to the URL the page reloads and I lose my state so it always loads component 1 because I set it to that in the constructor. If I remove the href it works, but the URL is not how I want it.
How do I get this to load the component I want, add to the URL, and keep the state?
Thank you
javascript reactjs navbar react-bootstrap react-state-management
javascript reactjs navbar react-bootstrap react-state-management
asked Nov 20 '18 at 2:25
Grant KochmannGrant Kochmann
497
497
3
Use a react router. No need to re-invent the wheel.
– charlietfl
Nov 20 '18 at 2:30
add a comment |
3
Use a react router. No need to re-invent the wheel.
– charlietfl
Nov 20 '18 at 2:30
3
3
Use a react router. No need to re-invent the wheel.
– charlietfl
Nov 20 '18 at 2:30
Use a react router. No need to re-invent the wheel.
– charlietfl
Nov 20 '18 at 2:30
add a comment |
1 Answer
1
active
oldest
votes
As mentioned in the comments, React Router is a good choice for your requirements.
Here's a codesandbox using React Router, simply illustrating the functionality you describe.
You could also use the browser's 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.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53385335%2fload-new-component-while-adding-href-to-url%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
As mentioned in the comments, React Router is a good choice for your requirements.
Here's a codesandbox using React Router, simply illustrating the functionality you describe.
You could also use the browser's 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.
add a comment |
As mentioned in the comments, React Router is a good choice for your requirements.
Here's a codesandbox using React Router, simply illustrating the functionality you describe.
You could also use the browser's 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.
add a comment |
As mentioned in the comments, React Router is a good choice for your requirements.
Here's a codesandbox using React Router, simply illustrating the functionality you describe.
You could also use the browser's 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.
As mentioned in the comments, React Router is a good choice for your requirements.
Here's a codesandbox using React Router, simply illustrating the functionality you describe.
You could also use the browser's 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.
edited Nov 20 '18 at 4:43
answered Nov 20 '18 at 4:35
krisaoekrisaoe
515
515
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53385335%2fload-new-component-while-adding-href-to-url%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
3
Use a react router. No need to re-invent the wheel.
– charlietfl
Nov 20 '18 at 2:30