React use input vale to search api
React newbie here... I am pulling my hair out trying to figure this out... I am trying to use bandsintown API to search for bands then display the results. I am having a difficult time taking the entered band name and then using that as part of the fetch to the bansintown API. It appears that things are re-rendering or not rendering in the correct order, etc. I have tried putting my call to fetch in componentDidMount but that renders before the 'band' state is set...please help... here is a snippet of my code:
import React, { Component } from "react";
class BandSearch extends Component {
constructor(props) {
super(props);
this.state = {
band: "",
events:
};
}
componentDidMount() {
this.handleChange();
}
async getBand(e) {
e.preventDefault();
try {
const res = await fetch(
`https://rest.bandsintown.com/artists/${
this.state.band
}/events?app_id=acdb6da27e696632f85c3733dd43db52`
);
const events = await res.json();
this.setState({
events: events
});
} catch (e) {
console.log(e);
}
}
handleChange = () => {
this.setState({
band: this.result.value
});
console.log("state", this.state);
};
render() {
console.log(this.state.band);
return (
<div>
<h3>Enter Band to check on tour dates</h3>
<form>
<input
type="text"
placeholder="Enter band name"
ref={input => (this.result = input)}
onChange={this.handleChange}
/>
<button onClick={this.getBand}>Search</button>
</form>
</div>
);
}
}
export default BandSearch;
Thanks so much in advance!!
reactjs
add a comment |
React newbie here... I am pulling my hair out trying to figure this out... I am trying to use bandsintown API to search for bands then display the results. I am having a difficult time taking the entered band name and then using that as part of the fetch to the bansintown API. It appears that things are re-rendering or not rendering in the correct order, etc. I have tried putting my call to fetch in componentDidMount but that renders before the 'band' state is set...please help... here is a snippet of my code:
import React, { Component } from "react";
class BandSearch extends Component {
constructor(props) {
super(props);
this.state = {
band: "",
events:
};
}
componentDidMount() {
this.handleChange();
}
async getBand(e) {
e.preventDefault();
try {
const res = await fetch(
`https://rest.bandsintown.com/artists/${
this.state.band
}/events?app_id=acdb6da27e696632f85c3733dd43db52`
);
const events = await res.json();
this.setState({
events: events
});
} catch (e) {
console.log(e);
}
}
handleChange = () => {
this.setState({
band: this.result.value
});
console.log("state", this.state);
};
render() {
console.log(this.state.band);
return (
<div>
<h3>Enter Band to check on tour dates</h3>
<form>
<input
type="text"
placeholder="Enter band name"
ref={input => (this.result = input)}
onChange={this.handleChange}
/>
<button onClick={this.getBand}>Search</button>
</form>
</div>
);
}
}
export default BandSearch;
Thanks so much in advance!!
reactjs
add a comment |
React newbie here... I am pulling my hair out trying to figure this out... I am trying to use bandsintown API to search for bands then display the results. I am having a difficult time taking the entered band name and then using that as part of the fetch to the bansintown API. It appears that things are re-rendering or not rendering in the correct order, etc. I have tried putting my call to fetch in componentDidMount but that renders before the 'band' state is set...please help... here is a snippet of my code:
import React, { Component } from "react";
class BandSearch extends Component {
constructor(props) {
super(props);
this.state = {
band: "",
events:
};
}
componentDidMount() {
this.handleChange();
}
async getBand(e) {
e.preventDefault();
try {
const res = await fetch(
`https://rest.bandsintown.com/artists/${
this.state.band
}/events?app_id=acdb6da27e696632f85c3733dd43db52`
);
const events = await res.json();
this.setState({
events: events
});
} catch (e) {
console.log(e);
}
}
handleChange = () => {
this.setState({
band: this.result.value
});
console.log("state", this.state);
};
render() {
console.log(this.state.band);
return (
<div>
<h3>Enter Band to check on tour dates</h3>
<form>
<input
type="text"
placeholder="Enter band name"
ref={input => (this.result = input)}
onChange={this.handleChange}
/>
<button onClick={this.getBand}>Search</button>
</form>
</div>
);
}
}
export default BandSearch;
Thanks so much in advance!!
reactjs
React newbie here... I am pulling my hair out trying to figure this out... I am trying to use bandsintown API to search for bands then display the results. I am having a difficult time taking the entered band name and then using that as part of the fetch to the bansintown API. It appears that things are re-rendering or not rendering in the correct order, etc. I have tried putting my call to fetch in componentDidMount but that renders before the 'band' state is set...please help... here is a snippet of my code:
import React, { Component } from "react";
class BandSearch extends Component {
constructor(props) {
super(props);
this.state = {
band: "",
events:
};
}
componentDidMount() {
this.handleChange();
}
async getBand(e) {
e.preventDefault();
try {
const res = await fetch(
`https://rest.bandsintown.com/artists/${
this.state.band
}/events?app_id=acdb6da27e696632f85c3733dd43db52`
);
const events = await res.json();
this.setState({
events: events
});
} catch (e) {
console.log(e);
}
}
handleChange = () => {
this.setState({
band: this.result.value
});
console.log("state", this.state);
};
render() {
console.log(this.state.band);
return (
<div>
<h3>Enter Band to check on tour dates</h3>
<form>
<input
type="text"
placeholder="Enter band name"
ref={input => (this.result = input)}
onChange={this.handleChange}
/>
<button onClick={this.getBand}>Search</button>
</form>
</div>
);
}
}
export default BandSearch;
Thanks so much in advance!!
reactjs
reactjs
asked Nov 20 '18 at 16:48
g_wizzg_wizz
1
1
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
You need to pass the event from the onChange event of the input like so:
handleChange = (e) => {
this.setState({
band: e.currentTarget.value
});
// console.log("state", this.state); This will have unexpected results. Try to investigate why.
};
Also remove the call to handleChange in componentDidMount
add a comment |
You are actually missing this binding your function in your constructor.
constructor(props) {
super(props);
this.getBand = this.getBand.bind(this);
this.state = {
band: "",
events:
};
}
Here is the demo of that: https://stackblitz.com/edit/react-hfkqaw?file=index.js
This is from react
You have to be careful about the meaning of this in JSX callbacks. In
JavaScript, class methods are not bound by default. If you forget to
bind this.handleClick and pass it to onClick, this will be undefined
when the function is actually called.
full reading here: https://reactjs.org/docs/handling-events.html
thanks all for the quick responses!...I'll look into this and report back...much appreciated
– g_wizz
Nov 20 '18 at 17:17
1
I got it working finally... I had to remove the try/ catch clause though but it works great now...Thanks again!
– g_wizz
Nov 21 '18 at 2:02
@g_wizz glad it helped
– Just code
Nov 21 '18 at 4:13
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%2f53397737%2freact-use-input-vale-to-search-api%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
You need to pass the event from the onChange event of the input like so:
handleChange = (e) => {
this.setState({
band: e.currentTarget.value
});
// console.log("state", this.state); This will have unexpected results. Try to investigate why.
};
Also remove the call to handleChange in componentDidMount
add a comment |
You need to pass the event from the onChange event of the input like so:
handleChange = (e) => {
this.setState({
band: e.currentTarget.value
});
// console.log("state", this.state); This will have unexpected results. Try to investigate why.
};
Also remove the call to handleChange in componentDidMount
add a comment |
You need to pass the event from the onChange event of the input like so:
handleChange = (e) => {
this.setState({
band: e.currentTarget.value
});
// console.log("state", this.state); This will have unexpected results. Try to investigate why.
};
Also remove the call to handleChange in componentDidMount
You need to pass the event from the onChange event of the input like so:
handleChange = (e) => {
this.setState({
band: e.currentTarget.value
});
// console.log("state", this.state); This will have unexpected results. Try to investigate why.
};
Also remove the call to handleChange in componentDidMount
answered Nov 20 '18 at 16:57
Francisco GarciaFrancisco Garcia
704
704
add a comment |
add a comment |
You are actually missing this binding your function in your constructor.
constructor(props) {
super(props);
this.getBand = this.getBand.bind(this);
this.state = {
band: "",
events:
};
}
Here is the demo of that: https://stackblitz.com/edit/react-hfkqaw?file=index.js
This is from react
You have to be careful about the meaning of this in JSX callbacks. In
JavaScript, class methods are not bound by default. If you forget to
bind this.handleClick and pass it to onClick, this will be undefined
when the function is actually called.
full reading here: https://reactjs.org/docs/handling-events.html
thanks all for the quick responses!...I'll look into this and report back...much appreciated
– g_wizz
Nov 20 '18 at 17:17
1
I got it working finally... I had to remove the try/ catch clause though but it works great now...Thanks again!
– g_wizz
Nov 21 '18 at 2:02
@g_wizz glad it helped
– Just code
Nov 21 '18 at 4:13
add a comment |
You are actually missing this binding your function in your constructor.
constructor(props) {
super(props);
this.getBand = this.getBand.bind(this);
this.state = {
band: "",
events:
};
}
Here is the demo of that: https://stackblitz.com/edit/react-hfkqaw?file=index.js
This is from react
You have to be careful about the meaning of this in JSX callbacks. In
JavaScript, class methods are not bound by default. If you forget to
bind this.handleClick and pass it to onClick, this will be undefined
when the function is actually called.
full reading here: https://reactjs.org/docs/handling-events.html
thanks all for the quick responses!...I'll look into this and report back...much appreciated
– g_wizz
Nov 20 '18 at 17:17
1
I got it working finally... I had to remove the try/ catch clause though but it works great now...Thanks again!
– g_wizz
Nov 21 '18 at 2:02
@g_wizz glad it helped
– Just code
Nov 21 '18 at 4:13
add a comment |
You are actually missing this binding your function in your constructor.
constructor(props) {
super(props);
this.getBand = this.getBand.bind(this);
this.state = {
band: "",
events:
};
}
Here is the demo of that: https://stackblitz.com/edit/react-hfkqaw?file=index.js
This is from react
You have to be careful about the meaning of this in JSX callbacks. In
JavaScript, class methods are not bound by default. If you forget to
bind this.handleClick and pass it to onClick, this will be undefined
when the function is actually called.
full reading here: https://reactjs.org/docs/handling-events.html
You are actually missing this binding your function in your constructor.
constructor(props) {
super(props);
this.getBand = this.getBand.bind(this);
this.state = {
band: "",
events:
};
}
Here is the demo of that: https://stackblitz.com/edit/react-hfkqaw?file=index.js
This is from react
You have to be careful about the meaning of this in JSX callbacks. In
JavaScript, class methods are not bound by default. If you forget to
bind this.handleClick and pass it to onClick, this will be undefined
when the function is actually called.
full reading here: https://reactjs.org/docs/handling-events.html
answered Nov 20 '18 at 17:03
Just codeJust code
10.4k53066
10.4k53066
thanks all for the quick responses!...I'll look into this and report back...much appreciated
– g_wizz
Nov 20 '18 at 17:17
1
I got it working finally... I had to remove the try/ catch clause though but it works great now...Thanks again!
– g_wizz
Nov 21 '18 at 2:02
@g_wizz glad it helped
– Just code
Nov 21 '18 at 4:13
add a comment |
thanks all for the quick responses!...I'll look into this and report back...much appreciated
– g_wizz
Nov 20 '18 at 17:17
1
I got it working finally... I had to remove the try/ catch clause though but it works great now...Thanks again!
– g_wizz
Nov 21 '18 at 2:02
@g_wizz glad it helped
– Just code
Nov 21 '18 at 4:13
thanks all for the quick responses!...I'll look into this and report back...much appreciated
– g_wizz
Nov 20 '18 at 17:17
thanks all for the quick responses!...I'll look into this and report back...much appreciated
– g_wizz
Nov 20 '18 at 17:17
1
1
I got it working finally... I had to remove the try/ catch clause though but it works great now...Thanks again!
– g_wizz
Nov 21 '18 at 2:02
I got it working finally... I had to remove the try/ catch clause though but it works great now...Thanks again!
– g_wizz
Nov 21 '18 at 2:02
@g_wizz glad it helped
– Just code
Nov 21 '18 at 4:13
@g_wizz glad it helped
– Just code
Nov 21 '18 at 4:13
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%2f53397737%2freact-use-input-vale-to-search-api%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