使用 Relay 更新 React 状态

IT技术 javascript reactjs redux relay graphql
2021-05-25 00:46:39

使用 Relay,你可以像往常一样创建一个 React 组件:

class TodoApp extends React.Component {
  ...
}

然后组件被包裹在一个 Relay 容器中:

export default Relay.createContainer(TodoApp, {
  ...
});

Relay 容器将使用 GraphQL 获取数据,然后更新状态。这是一个高阶组件,然后这个状态作为props传递给它的孩子。

这与 Redux 之类的通量实现不兼容(或似乎不兼容)。Redux 有一个单一的全局状态对象,它也有将 props 传递给表现组件的高阶组件。所以我目前看不到 Redux 存储和 Relay 容器如何共存。

那么我们应该如何更新不是来自数据库的状态呢?这种状态应该如何用 Relay 管理?

3个回答

虽然我无法为您提供将它们一起使用的建议,但从技术上讲,您绝对可以一个接一个地应用几个高阶组件:

class TodoApp extends React.Component {
  // ...
}

TodoApp = connect(
  // ...
)(TodoApp);

TodoApp = Relay.createContainer(TodoApp, {
  // ...
});

export default TodoApp;

我不确定这是否有意义,但它很容易实现。

这些事情仍在讨论中,如果您使用 Relay 容器,Redux 和 Relay 的当前状态可能无法很好地结合在一起。

你可以在这里加入讨论

我为聊天应用程序做了如下操作:

  1. 聊天组件 ( ChatComponent) 是一个愚蠢的react组件,它期望所有数据都作为props出现。它还需要 reduxdispatch函数作为props,以便在有人想要发送新消息时分派动作。这是一个“私有”组件,由...包装
  2. ChatComponentRelay - 这个渲染ChatComponent但是是一个 Relay 组件,它也连接到 redux 存储。它使用生命周期方法之一(不是构造函数)将通过中继接收到的数据分派到 redux 存储中。这是应用程序其余部分使用的组件,基本上只是底层 dum 的代理ChatComponent它呈现ChatComponent从 redux 存储中传入其 props 中的所有数据,以及 reduxdispatch函数。