我正在使用React Context在组件(操作)之间进行通信
Context.Consumer驻留在组件的return()部分内,因此不会为组件提供道具(除非将Consumer放在父组件中,但我们又回到了道具钻孔的不良之处)
Apollo客户端由Apollo的compose()应用于结果可用于组件道具但更重要的是,道具的变化导致Apollo重新获取
使用Context,这个自动重新获取途径被打破了,除了将整个GraphQl文档放入组件(在Context.Consume之后)以在Context引入操作时手动执行重新提取时,我没有别的办法。
这是模式的彻底改变,我真的很想知道我是否错过了一些大局?
const Child = ({ gqlGetData }) => {
if (gqlGetData.loading) return "..."
const { componentData } = gqlGetData
return (
<AppControl.Consumer>
{appControl => (
<React.Fragment>
---component rendering logic here ---
---but needs also refetch logic and GraphQl document---
)}
</React.Fragment>
)}
</AppControl.Consumer>
)
}