- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在平面列表中具有以下按钮,可触发graphql突变,在突变后,我执行writeQuery以更新本地缓存(存储)。在变异的更新函数中,我正在更新缓存中的两个字段。基本上,当用户触摸“赞”按钮时,我会将“赞”的 bool 值更改为true,并通过+1(类似于“推特”)来更新该帖子的“赞”计数。但是,平面列表中的组件不会更新。我什至打印出了阿波罗存储/缓存,并且看到值正在更新。为何在缓存写入后不重新呈现平面列表?
render() {
const { posts, isFetching, lastUpdated, location, navigation, data, likeMutation, username, distancePointLatitude, distancePointLongitude, searchPointLatitude, searchPointLongitude } = this.props
<FlatList
data={data.near}
style={styles.scrollViewContent}
extraData={this.props.store}
//renderSeparator={(sectionId, rowId) => <View key={rowId} style={styles.separator} />}
showsVerticalScrollIndicator={false}
onRefresh={this._onRefresh.bind(this)}
refreshing={this.state.refreshing}
keyExtractor={this._keyExtractor}
renderItem={({item, index}) => item.posts.length != 0 && <ListItem>
{item.posts[0].userInteraction.userLike ? <Icon name='md-heart' style={{ color: 'crimson',fontSize: 28}} />
: <Icon name='heart' style={{ fontSize: 26}}
onPress={() => likeMutation({ variables: { elementId: item.posts[0].postId, userId: username },
update: (store, { data: { addLike } }) => {
// Read the data from our cache for this query.
var thisLocationRadius = {searchPointLongitude: searchPointLongitude,
searchPointLatitude: searchPointLatitude,
radius: fiftyMilesInMeters, distancePointLongitude: distancePointLongitude,
distancePointLatitude: distancePointLatitude };
var data = store.readQuery({ query: getLocalPosts,
variables: {
locationRadius: thisLocationRadius,
userId: username
}, });
data.near[index].posts[0].userInteraction.userLike = true
data.near[index].posts[0].interactionStats.totalLikes + 1
// Write our data back to the cache.
store.writeQuery({ query: getLocalPosts, data });
},
}).catch((error) => {
console.log('there was an error sending the query', error);
})} /> }
}
const HomeWithData = graphql(getLocalPosts, {
options: ({ searchPointLongitude, searchPointLatitude, distancePointLongitude, distancePointLatitude, username }) => ({ variables: { locationRadius: {searchPointLongitude: searchPointLongitude,
searchPointLatitude: searchPointLatitude,
radius: fiftyMilesInMeters, distancePointLongitude: distancePointLongitude,
distancePointLatitude: distancePointLatitude }, userId: username } }),
});
export default compose( connect(mapStateToProps),
HomeWithData,
graphql(like, { name: 'likeMutation' }))(Home);
export const getLocalPosts = gql`query getLocalPosts($locationRadius: locationRadius!, , $userId: String!) {
near(locationRadius: $locationRadius){
name,
address,
phonenumber,
email,
website,
about,
location {
longitude,
latitude
},
distance(unit: MILE),
businessId,
hours {
weekDay,
startTime,
endTime
},
posts(isActive: true) {
postText,
postId,
userInteraction(userId: $userId){
userLike
},
interactionStats{
totalLikes
}
},
}
}`;
最佳答案
我认为Apollo在决定更改后应触发哪个查询监听器时会考虑一些事项,包括variables
字段。
对于您而言,带有平面列表的组件不会重新呈现,因为不会向查询通知更改。它不会收到更改通知,因为Apollo认为这是与调用writeQuery
时要在商店中更新的查询不同的查询。
因此,解决方案是在调用variables
时添加writeQuery
字段。并且它应该具有与调用查询时所使用的值相同的值。
假设它们具有正确的值,则您对store.writeQuery
的调用应如下所示:
store.writeQuery({
query: getLocalPosts,
data,
variables: {
locationRadius: thisLocationRadius,
userId: username
}
});
关于react-native - Apollo graphql : writeQuery after mutation does not trigger re-render of flatlist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102797/
所以我正在关注 https://www.howtographql.com/react-apollo/6-more-mutations-and-updating-the-store/ 上的 graphq
我有一个创建新卡片对象的突变,我希望它应该在更新后添加到用户界面。缓存、Apollo Chrome 工具和控制台日志记录反射(reflect)了更改,但 UI 并非没有手动重新加载。 const [
我正在构建一个聊天应用程序,我正在尝试在用户发送消息时添加一个乐观的响应。但是,当结合 useMutation 的 optimisticResponse 和更新选项时,我遇到了一个问题。 当我使用 p
根据本地状态管理的 docs,可以同时使用 writeData 和 writeQuery 将数据附加到缓存中。 这里的最佳做法是什么?什么时候一个? 最佳答案 来自 the documentation
使用 useMutation() 后,缓存会更新,但 Home 组件中的 useQuery() 不会更新。 我尝试使用不同的fetchPolicy。我可以在 Apollo 开发工具中看到新帖子,但需要
我在平面列表中具有以下按钮,可触发graphql突变,在突变后,我执行writeQuery以更新本地缓存(存储)。在变异的更新函数中,我正在更新缓存中的两个字段。基本上,当用户触摸“赞”按钮时,我会将
我是一名优秀的程序员,十分优秀!