javascript - 如何在 Relay QueryRenderer 中更新 React 状态?
问题描述
我对基于React Relay的小型项目有疑问。该组件是一个带有输入字段的表单,它使用QueryRenderer从服务器接收数据,并可以通过突变发送修改后的数据。问题是如果更新QueryRenderer内部的状态,那么组件会再次渲染,这将导致无限循环。但是从服务器接收到的数据必须被带入一个状态,以便它可以被更新并发送回服务器。如何在Relay应用程序中执行此操作?如果有任何帮助,我将不胜感激。下面是我的项目的简化代码。PS 一些标签取自 ant design。
<QueryRenderer
environment={environment}
query={HeroAllPostQuery}
render={({ error, props }) => {
if (error) {
return <div>{error.message}</div>;
} else if (props) {
let hero = props.viewer.allPosts.edges[0].node;
this.setState({ name: hero.name });
return (
<Form>
<Form.Item label="Hero name"><Input name='name' defaultValue={hero.name} value={this.state.name} onChange={this._handleChange} /></Form.Item>
<Button type="primary" onClick={() => {
this._handleUpdateHero(hero.id);
}}>Save</Button>
</Form>
);
}
return <div>Loading...</div>
}}
/>
应用程序的其余部分——表单处理程序、graphql查询等工作正常,所以我没有在这里给出它们。问题是从哪里获取从服务器接收到的数据,在表单输入中使用它,然后通过突变发送修改后的数据。
解决方案
推荐阅读
- node.js - 通过 npm 命令行测试
- php - PHP未通过本地套接字连接到MYSQL
- python - 如何在 alpine 中通过 python 使用 chromedriver 和 selenium
- python-3.x - 未绑定的本地错误:在分配之前引用?
- java - classnotfound 异常,但一切看起来都正确。有人可以告诉我我的启动功能是否错误吗?
- selenium - 当macbook被锁定时,由Jenkins在mac上发起的selenium safari测试不会运行
- excel - 根据 Excel 中的另一个表在单独的表中查找相应的值
- excel - 是否可以打开文件资源管理器并单击文本文件以获取 VBA 中的地址名称?
- r - 在自动绘图中更改颜色和框架
- firebase - Cloud Firestore 文档数据库中的正确设计