How to force a reload of ReactJS Relay Modern data (force fetch)?
Consider the following ReactJS component with Relay Modern:
import React, { Component } from "react";
import PropTypes from "prop-types";
import { graphql } from "react-relay";
import { QueryRenderer } from "react-relay";
import environment from "../../relay/environment";
const CustomersQuery = graphql`
query CustomersQuery($versionId: ID!) {
viewer {
customers {
id
name
}
}
}
`;
class Customers extends Component {
handleRefresh = () => {
/// ???? ///
How to force relay to refetch data here ?
/// ???? ///
};
getCustomer = (customer) => {
return (
<div>
<p>Customer Data:</p>
<p>Id: {customer.id}</p>
<p>Name: {customer.name}</p>
</div>
);
}
handleContent = props => {
let customers = props.viewer.customers.map(customer => {
return this.getCustomer(customer);
});
return (
<div>
<button type="button" onClick={this.handleRefresh}>
Reload Screen
</button>
{customers}
</div>
);
};
render = () => {
return (
<QueryRenderer
environment={environment}
query={this.props.query}
render={({ error, props }) => {
if (error) {
throw new error;
} else if (props) {
return this.handleContent(props);
}
return <p>>Loading...</p>;
}}
/>
);
};
}
export default Customers;
What is the correct way to force the component to reload Relay data inside handleRefresh
handler ?
javascript reactjs relay relaymodern
add a comment |
Consider the following ReactJS component with Relay Modern:
import React, { Component } from "react";
import PropTypes from "prop-types";
import { graphql } from "react-relay";
import { QueryRenderer } from "react-relay";
import environment from "../../relay/environment";
const CustomersQuery = graphql`
query CustomersQuery($versionId: ID!) {
viewer {
customers {
id
name
}
}
}
`;
class Customers extends Component {
handleRefresh = () => {
/// ???? ///
How to force relay to refetch data here ?
/// ???? ///
};
getCustomer = (customer) => {
return (
<div>
<p>Customer Data:</p>
<p>Id: {customer.id}</p>
<p>Name: {customer.name}</p>
</div>
);
}
handleContent = props => {
let customers = props.viewer.customers.map(customer => {
return this.getCustomer(customer);
});
return (
<div>
<button type="button" onClick={this.handleRefresh}>
Reload Screen
</button>
{customers}
</div>
);
};
render = () => {
return (
<QueryRenderer
environment={environment}
query={this.props.query}
render={({ error, props }) => {
if (error) {
throw new error;
} else if (props) {
return this.handleContent(props);
}
return <p>>Loading...</p>;
}}
/>
);
};
}
export default Customers;
What is the correct way to force the component to reload Relay data inside handleRefresh
handler ?
javascript reactjs relay relaymodern
add a comment |
Consider the following ReactJS component with Relay Modern:
import React, { Component } from "react";
import PropTypes from "prop-types";
import { graphql } from "react-relay";
import { QueryRenderer } from "react-relay";
import environment from "../../relay/environment";
const CustomersQuery = graphql`
query CustomersQuery($versionId: ID!) {
viewer {
customers {
id
name
}
}
}
`;
class Customers extends Component {
handleRefresh = () => {
/// ???? ///
How to force relay to refetch data here ?
/// ???? ///
};
getCustomer = (customer) => {
return (
<div>
<p>Customer Data:</p>
<p>Id: {customer.id}</p>
<p>Name: {customer.name}</p>
</div>
);
}
handleContent = props => {
let customers = props.viewer.customers.map(customer => {
return this.getCustomer(customer);
});
return (
<div>
<button type="button" onClick={this.handleRefresh}>
Reload Screen
</button>
{customers}
</div>
);
};
render = () => {
return (
<QueryRenderer
environment={environment}
query={this.props.query}
render={({ error, props }) => {
if (error) {
throw new error;
} else if (props) {
return this.handleContent(props);
}
return <p>>Loading...</p>;
}}
/>
);
};
}
export default Customers;
What is the correct way to force the component to reload Relay data inside handleRefresh
handler ?
javascript reactjs relay relaymodern
Consider the following ReactJS component with Relay Modern:
import React, { Component } from "react";
import PropTypes from "prop-types";
import { graphql } from "react-relay";
import { QueryRenderer } from "react-relay";
import environment from "../../relay/environment";
const CustomersQuery = graphql`
query CustomersQuery($versionId: ID!) {
viewer {
customers {
id
name
}
}
}
`;
class Customers extends Component {
handleRefresh = () => {
/// ???? ///
How to force relay to refetch data here ?
/// ???? ///
};
getCustomer = (customer) => {
return (
<div>
<p>Customer Data:</p>
<p>Id: {customer.id}</p>
<p>Name: {customer.name}</p>
</div>
);
}
handleContent = props => {
let customers = props.viewer.customers.map(customer => {
return this.getCustomer(customer);
});
return (
<div>
<button type="button" onClick={this.handleRefresh}>
Reload Screen
</button>
{customers}
</div>
);
};
render = () => {
return (
<QueryRenderer
environment={environment}
query={this.props.query}
render={({ error, props }) => {
if (error) {
throw new error;
} else if (props) {
return this.handleContent(props);
}
return <p>>Loading...</p>;
}}
/>
);
};
}
export default Customers;
What is the correct way to force the component to reload Relay data inside handleRefresh
handler ?
javascript reactjs relay relaymodern
javascript reactjs relay relaymodern
asked Jun 27 '18 at 10:25
MendesMendes
4,465956136
4,465956136
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
<QueryRenderer
environment={environment}
query={graphql`
query MyQuery
{
{
id
name
caption
url
}
`}
variables={{isUpdate: this.state.isUpdate}} //Change the state in case you want latest response, this variable will be ignored at the server
render={({error, props}) => {
if (error) {
console.error(error);
return <div>Error!</div>;
}
if (!props) {
return <div>Loading...</div>;
}
console.log("response from server --->" , JSON.stringify(props))
return <div></div>
}}
/>
You can add add a parameter in the api call and pass the state to that parameter , change the state to get the latest response from the server.
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%2f51060413%2fhow-to-force-a-reload-of-reactjs-relay-modern-data-force-fetch%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
<QueryRenderer
environment={environment}
query={graphql`
query MyQuery
{
{
id
name
caption
url
}
`}
variables={{isUpdate: this.state.isUpdate}} //Change the state in case you want latest response, this variable will be ignored at the server
render={({error, props}) => {
if (error) {
console.error(error);
return <div>Error!</div>;
}
if (!props) {
return <div>Loading...</div>;
}
console.log("response from server --->" , JSON.stringify(props))
return <div></div>
}}
/>
You can add add a parameter in the api call and pass the state to that parameter , change the state to get the latest response from the server.
add a comment |
<QueryRenderer
environment={environment}
query={graphql`
query MyQuery
{
{
id
name
caption
url
}
`}
variables={{isUpdate: this.state.isUpdate}} //Change the state in case you want latest response, this variable will be ignored at the server
render={({error, props}) => {
if (error) {
console.error(error);
return <div>Error!</div>;
}
if (!props) {
return <div>Loading...</div>;
}
console.log("response from server --->" , JSON.stringify(props))
return <div></div>
}}
/>
You can add add a parameter in the api call and pass the state to that parameter , change the state to get the latest response from the server.
add a comment |
<QueryRenderer
environment={environment}
query={graphql`
query MyQuery
{
{
id
name
caption
url
}
`}
variables={{isUpdate: this.state.isUpdate}} //Change the state in case you want latest response, this variable will be ignored at the server
render={({error, props}) => {
if (error) {
console.error(error);
return <div>Error!</div>;
}
if (!props) {
return <div>Loading...</div>;
}
console.log("response from server --->" , JSON.stringify(props))
return <div></div>
}}
/>
You can add add a parameter in the api call and pass the state to that parameter , change the state to get the latest response from the server.
<QueryRenderer
environment={environment}
query={graphql`
query MyQuery
{
{
id
name
caption
url
}
`}
variables={{isUpdate: this.state.isUpdate}} //Change the state in case you want latest response, this variable will be ignored at the server
render={({error, props}) => {
if (error) {
console.error(error);
return <div>Error!</div>;
}
if (!props) {
return <div>Loading...</div>;
}
console.log("response from server --->" , JSON.stringify(props))
return <div></div>
}}
/>
You can add add a parameter in the api call and pass the state to that parameter , change the state to get the latest response from the server.
edited Nov 12 '18 at 10:33
answered Nov 12 '18 at 9:42
vivekvivek
11
11
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%2f51060413%2fhow-to-force-a-reload-of-reactjs-relay-modern-data-force-fetch%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