首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Apollo、Graphql的跨组件通信架构

基于Apollo、Graphql的跨组件通信架构
EN

Stack Overflow用户
提问于 2018-05-18 16:09:11
回答 1查看 126关注 0票数 2

在构建UI时,经常会出现这样的问题:用户输入组件在视觉上位于拥有状态的组件之外。

假设您正在构建一个包含多个步骤的表单向导,该向导必须在单击next按钮时提交相应的表单:

代码语言:javascript
复制
 class WizardContainer {
   render(){
     return 
       <Wizard>
         <FormContainer/>
         <NavigationContainer/>
       </Wizard>
   }
 }

 class NavigationContainer {
   currentFromContainer(){ ... }       

   render(){
     let FormContainer = currentFormContainer()
     return <FormContainer/>
   }

 class WizardContainer {
   render(){
     return 
       <Navigation title="next", onClick={...}>
    }
 }

在提交时,必须激发带有当前表单输入的graphql突变。从理论上讲,当前表单的提交代码属于各自的Formcontainer。但是提交操作在外部。

用apollo和apollo-link-state解决这种跨组件通信的最好方法是什么?

还是说这超出了阿波罗的范围?如果是这样的话,哪些是react惯用的解决方案?

Redux也不能解决这个问题。可以将表单的状态放到中央存储中,但提交始终是一个不同的操作。

EN

回答 1

Stack Overflow用户

发布于 2018-05-26 02:21:49

在过去的几天里,我一直在做这件事,这迫使我学习了很多我不知道的关于React的知识,这段时间是值得的。我在top/parent组件中有一个单独的React状态,它存储要传递给子组件的操作。最大的问题是找到一种方法来传播动作,React上下文适用于更长的距离,但我主要通过道具来传递它。

然后,接收组件必须是类类型,以便它可以分析SCU中的操作,并决定操作是否会导致一些重新操作(最常见的是呈现)。

我不认为你应该复制解决方案,而是自己做,并用它来学习反应的深度,我向你保证它会得到回报的!

已经说过了,你应该开始做这个了。

代码语言:javascript
复制
  constructor() {
    super()
    this.state = {
      dispatch: this.dispatch,
      type: null,
      payload: null
    }
  }

  dispatch = (type, payload) => {
    switch (type) {
      case "user_set":
        setApolloCache({ userId: payload.userId })
   this.setState(prevState => ({
       dispatch: prevState.dispatch,
       type,
       payload
     }))
        break
   ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50406668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档