【发布时间】:2016-03-24 14:25:08
【问题描述】:
假设我有一个控制 textarea 的 React 组件,该 textarea 包含博客文章的内容。当用户更改博客文章时,我使用 Mutation 更新 Relay Store:
Relay.createContainer(
React.createClass({
handleChange(event) {
Relay.Store.update(new BlogBodyMutation({
body: event.target.value,
blog: this.props.blog
}))
},
render() {
return (
<textarea
value={ this.props.blog.body }
onChange={ this.handleChange }
/>
);
}
}), {
fragments: {
blog: () => Relay.QL`
fragment on Blog {
body
${ BlogBodyMutation.getFragment('blog') }
}
`
}
}
)
class BlogBodyMutation extends Relay.Mutation {
static fragments = {
blog: () => Relay.QL`fragment on Blog { id }`
};
getMutation() {
return Relay.QL`mutation { blog }`
}
getVariables() {
return {
id: this.props.blog.id,
body: this.props.body
}
}
getFatQuery() {
return Relay.QL`fragment on BlogMutationPayload { blog { body } }`
}
getConfigs() {
return [{ type: 'FIELDS_CHANGE', fieldIDs: { blog: this.props.blog.id }}]
}
}
问题:每次我使用 Mutation 更新 Store 时,Relay 都会将整个博客文章往返于后端!假设帖子是 50KB,即使每次去抖动编辑的去抖动为 50KB + 一些字节。有什么办法可以避免吗?
我已经尝试了一些,但还没有找到可行的解决方案。我尝试使用带有空有效负载且没有字段配置的乐观响应,但这看起来很奇怪,并且在受控的textarea 下实际上效果不佳。
【问题讨论】:
标签: relayjs