Why don't we write axios.get(blabla) inside the render method?
up vote
0
down vote
favorite
Why don't we write
axios
.get('https://rallycoding.herokuapp.com/api/music_albums')
.then(response => this.setState({ albums: response.data }));
inside the render
method, do we have to put it in componentWillMount
?
What would be wrong if we put it at the beginning of the render
method?
I put it in the render
and got the same result but the tutorial says that it should be in componentWillMount
.
javascript reactjs react-native
add a comment |
up vote
0
down vote
favorite
Why don't we write
axios
.get('https://rallycoding.herokuapp.com/api/music_albums')
.then(response => this.setState({ albums: response.data }));
inside the render
method, do we have to put it in componentWillMount
?
What would be wrong if we put it at the beginning of the render
method?
I put it in the render
and got the same result but the tutorial says that it should be in componentWillMount
.
javascript reactjs react-native
Well, you'd be submitting a request every time you rerendered, plus you should NEVER set state in render, or in a callback of an async function in render.
– Li357
Jul 11 '17 at 5:04
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
Why don't we write
axios
.get('https://rallycoding.herokuapp.com/api/music_albums')
.then(response => this.setState({ albums: response.data }));
inside the render
method, do we have to put it in componentWillMount
?
What would be wrong if we put it at the beginning of the render
method?
I put it in the render
and got the same result but the tutorial says that it should be in componentWillMount
.
javascript reactjs react-native
Why don't we write
axios
.get('https://rallycoding.herokuapp.com/api/music_albums')
.then(response => this.setState({ albums: response.data }));
inside the render
method, do we have to put it in componentWillMount
?
What would be wrong if we put it at the beginning of the render
method?
I put it in the render
and got the same result but the tutorial says that it should be in componentWillMount
.
javascript reactjs react-native
javascript reactjs react-native
edited Nov 11 at 12:06
Cœur
17.1k9102140
17.1k9102140
asked Jul 11 '17 at 5:01
farmcommand2
243414
243414
Well, you'd be submitting a request every time you rerendered, plus you should NEVER set state in render, or in a callback of an async function in render.
– Li357
Jul 11 '17 at 5:04
add a comment |
Well, you'd be submitting a request every time you rerendered, plus you should NEVER set state in render, or in a callback of an async function in render.
– Li357
Jul 11 '17 at 5:04
Well, you'd be submitting a request every time you rerendered, plus you should NEVER set state in render, or in a callback of an async function in render.
– Li357
Jul 11 '17 at 5:04
Well, you'd be submitting a request every time you rerendered, plus you should NEVER set state in render, or in a callback of an async function in render.
– Li357
Jul 11 '17 at 5:04
add a comment |
1 Answer
1
active
oldest
votes
up vote
3
down vote
accepted
In general, the difference between the two would be in how many times do you want to make this request.
If you want the request to happen only the first time the component is mounted, you will use ComponentWillMount
(preferable)
If you want the request to happen on every render (discouraged), then use the render
method.
In your case, putting it in the render
method would actually cause an infinite recursion because each request calls setState
which will cause a re-render which will make the request which will call setState
which will cause a re-render...
Not to mention the cost on performance as well as the network congestion from so many frequent requests.
class Example extends React.Component {
constructor() {
super()
this.state = {
counter: 0
}
}
render() {
// fake async action to act as a request
setTimeout(() => {
const { counter } = this.state;
this.setState({
counter: counter + 1
})
}, 500)
return React.createElement('h3', null, this.state.counter)
}
}
ReactDOM.render(
React.createElement(Example),
document.querySelector('#example')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
<h2>Re-rendering forever</h2>
<div id="example"></div>
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
In general, the difference between the two would be in how many times do you want to make this request.
If you want the request to happen only the first time the component is mounted, you will use ComponentWillMount
(preferable)
If you want the request to happen on every render (discouraged), then use the render
method.
In your case, putting it in the render
method would actually cause an infinite recursion because each request calls setState
which will cause a re-render which will make the request which will call setState
which will cause a re-render...
Not to mention the cost on performance as well as the network congestion from so many frequent requests.
class Example extends React.Component {
constructor() {
super()
this.state = {
counter: 0
}
}
render() {
// fake async action to act as a request
setTimeout(() => {
const { counter } = this.state;
this.setState({
counter: counter + 1
})
}, 500)
return React.createElement('h3', null, this.state.counter)
}
}
ReactDOM.render(
React.createElement(Example),
document.querySelector('#example')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
<h2>Re-rendering forever</h2>
<div id="example"></div>
add a comment |
up vote
3
down vote
accepted
In general, the difference between the two would be in how many times do you want to make this request.
If you want the request to happen only the first time the component is mounted, you will use ComponentWillMount
(preferable)
If you want the request to happen on every render (discouraged), then use the render
method.
In your case, putting it in the render
method would actually cause an infinite recursion because each request calls setState
which will cause a re-render which will make the request which will call setState
which will cause a re-render...
Not to mention the cost on performance as well as the network congestion from so many frequent requests.
class Example extends React.Component {
constructor() {
super()
this.state = {
counter: 0
}
}
render() {
// fake async action to act as a request
setTimeout(() => {
const { counter } = this.state;
this.setState({
counter: counter + 1
})
}, 500)
return React.createElement('h3', null, this.state.counter)
}
}
ReactDOM.render(
React.createElement(Example),
document.querySelector('#example')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
<h2>Re-rendering forever</h2>
<div id="example"></div>
add a comment |
up vote
3
down vote
accepted
up vote
3
down vote
accepted
In general, the difference between the two would be in how many times do you want to make this request.
If you want the request to happen only the first time the component is mounted, you will use ComponentWillMount
(preferable)
If you want the request to happen on every render (discouraged), then use the render
method.
In your case, putting it in the render
method would actually cause an infinite recursion because each request calls setState
which will cause a re-render which will make the request which will call setState
which will cause a re-render...
Not to mention the cost on performance as well as the network congestion from so many frequent requests.
class Example extends React.Component {
constructor() {
super()
this.state = {
counter: 0
}
}
render() {
// fake async action to act as a request
setTimeout(() => {
const { counter } = this.state;
this.setState({
counter: counter + 1
})
}, 500)
return React.createElement('h3', null, this.state.counter)
}
}
ReactDOM.render(
React.createElement(Example),
document.querySelector('#example')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
<h2>Re-rendering forever</h2>
<div id="example"></div>
In general, the difference between the two would be in how many times do you want to make this request.
If you want the request to happen only the first time the component is mounted, you will use ComponentWillMount
(preferable)
If you want the request to happen on every render (discouraged), then use the render
method.
In your case, putting it in the render
method would actually cause an infinite recursion because each request calls setState
which will cause a re-render which will make the request which will call setState
which will cause a re-render...
Not to mention the cost on performance as well as the network congestion from so many frequent requests.
class Example extends React.Component {
constructor() {
super()
this.state = {
counter: 0
}
}
render() {
// fake async action to act as a request
setTimeout(() => {
const { counter } = this.state;
this.setState({
counter: counter + 1
})
}, 500)
return React.createElement('h3', null, this.state.counter)
}
}
ReactDOM.render(
React.createElement(Example),
document.querySelector('#example')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
<h2>Re-rendering forever</h2>
<div id="example"></div>
class Example extends React.Component {
constructor() {
super()
this.state = {
counter: 0
}
}
render() {
// fake async action to act as a request
setTimeout(() => {
const { counter } = this.state;
this.setState({
counter: counter + 1
})
}, 500)
return React.createElement('h3', null, this.state.counter)
}
}
ReactDOM.render(
React.createElement(Example),
document.querySelector('#example')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
<h2>Re-rendering forever</h2>
<div id="example"></div>
class Example extends React.Component {
constructor() {
super()
this.state = {
counter: 0
}
}
render() {
// fake async action to act as a request
setTimeout(() => {
const { counter } = this.state;
this.setState({
counter: counter + 1
})
}, 500)
return React.createElement('h3', null, this.state.counter)
}
}
ReactDOM.render(
React.createElement(Example),
document.querySelector('#example')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
<h2>Re-rendering forever</h2>
<div id="example"></div>
edited Jul 11 '17 at 5:16
answered Jul 11 '17 at 5:05
nem035
23.5k43760
23.5k43760
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f45025775%2fwhy-dont-we-write-axios-getblabla-inside-the-render-method%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
Well, you'd be submitting a request every time you rerendered, plus you should NEVER set state in render, or in a callback of an async function in render.
– Li357
Jul 11 '17 at 5:04