Reactjs 中继中发生突变后,使用查看器更新子组件

Reactjs 中继中发生突变后,使用查看器更新子组件,reactjs,graphql,relay,mutation,Reactjs,Graphql,Relay,Mutation,我是中继新手(使用reactjs),在查看器中发生提交变异后,在更新UI时遇到问题。在我的示例中,我有一个带有用户名的称呼组件,为了简化这个过程,我在用户名的输出后面放了一个输入字段 当用户更改textfield中的名称时,我会将其发送到UpdateStation和API。我的问题是,在保存新名称后,我不知道如何更新输入上方的名称。有人能帮我吗?我需要在更新程序中做什么 非常感谢 根组件: import React, {Component} from 'react'; import {Query

我是中继新手(使用reactjs),在查看器中发生提交变异后,在更新UI时遇到问题。在我的示例中,我有一个带有用户名的称呼组件,为了简化这个过程,我在用户名的输出后面放了一个输入字段

当用户更改textfield中的名称时,我会将其发送到UpdateStation和API。我的问题是,在保存新名称后,我不知道如何更新输入上方的名称。有人能帮我吗?我需要在更新程序中做什么

非常感谢

根组件:

import React, {Component} from 'react';
import {QueryRenderer, graphql} from 'react-relay';
import environment from 'app/settings/createRelayEnvironment';
import Salutation from 'app/components/dashboard/includes/Salutation';


const DashboardQuery = graphql`
    query DashboardQuery {
        viewer {
            ...Salutation_viewer
        }
    }
`;

class Dashboard extends Component {
    render() {
        return (
            <QueryRenderer
                environment={environment}
                query={DashboardQuery}
                render={({error, props}) => {
                    if (error) {
                        return <div>{error.message}</div>;
                    } else if (props) {
                        return (
                            <div>
                                <Salutation viewer={props.viewer}></Salutation>
                            </div>
                        );
                    }

                    return <div>Loading</div>;
                }}
            />
        );
    }
}

export default Dashboard;
import React, {Component} from 'react';
import {createFragmentContainer, graphql} from 'react-relay';
import PropTypes from 'prop-types';
import UpdateDashboardMutation from 'app/mutations/UpdateDashboardMutation';


class Salutation extends Component {
    render() {
        return (
            <div className="salutation">
                <h2>Willkommen {this.props.viewer.firstName}</h2>
                <input type="text" onChange={this._onChange.bind(this)}/>
            </div>
        );
    }

    _onChange(event) {
        UpdateDashboardMutation(event.currentTarget.value);
    }
}

Salutation.propTypes = {
    viewer: PropTypes.object
};

export default createFragmentContainer(Salutation, graphql`
    fragment Salutation_viewer on Viewer {
        firstName
    }
`);
import {commitMutation, graphql} from 'react-relay';
import environment from 'app/settings/createRelayEnvironment';


const mutation = graphql`
    mutation UpdateDashboardMutation($input: UpdateDashboardMutationInput!) {
        updateDashboard(input: $input) {
            ok,
            errors {
                field,
                messages
            }
        }
    }
`;


function UpdateDashboardMutation(firstName) {
    commitMutation(
        environment,
        {
            mutation,
            variables: {
                input: {
                    firstName
                }
            },
            updater(store) {
                // what i have to do here?
            }
        }
    );
}

export default UpdateDashboardMutation;
尝试:


有关详细信息,请参阅。

它不起作用:(在控制台中,我收到以下错误:
未捕获错误:RelayRecordSourceSelectorProxy#getRootField():找不到根字段“viewer”,在GraphQL文档“UpdateDashBoard”中未定义此类字段。
我找到了解决方案。我将viewerId传递给UpdateStation,并使用它获取查看器:
const viewer=store.get(viewerId);
现在它可以工作了。非常感谢:)
const viewer = store.getRootField('viewer');
viewer.setValue(firstName, 'name');