首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制重新加载ReactJS中继现代数据(强制获取)?

如何强制重新加载ReactJS中继现代数据(强制获取)?
EN

Stack Overflow用户
提问于 2018-06-27 18:25:20
回答 2查看 932关注 0票数 1

考虑以下具有现代继电器的ReactJS组件:

代码语言:javascript
复制
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;

强制组件在handleRefresh处理程序中重新加载中继数据的正确方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2018-11-12 17:42:30

代码语言:javascript
复制
<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>
        }}
/>

您可以在api调用中添加一个参数,并将状态传递给该参数,更改状态以从服务器获取最新响应。

票数 0
EN

Stack Overflow用户

发布于 2019-03-31 18:56:56

我建议你将你的handleContent解压到一个新的组件中,并使用来自relay的createRefetchContainer HOC。然后,中继会注入一个道具,你可以用它来触发refetch,比如: props.relay.refetch(...)

请参阅relay docs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51060413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档