通过 Dispatcher 发送的 Flux 消息是否有约定?

IT技术 reactjs reactjs-flux
2022-07-17 02:10:11

我正在构建我的第一个 React 前端,并看到了许多通过 Dispatcher 发送的消息的约定。例如

{
  type: ActionTypes.RECEIVE_RAW_MESSAGES,
  rawMessages: rawMessages
}

https://github.com/facebook/flux/blob/master/examples/flux-chat/js/actions/ChatServerActionCreators.js#L21

{
  source: 'VIEW_ACTION',
  action: action
}

http://facebook.github.io/react/blog/2014/09/24/testing-flux-applications.html#putting-it-all-together

最好使用的消息格式是什么?为什么?

2个回答

简短的回答是,这可能并不重要——只要您的商店寻找正确的数据。我总是使用以下格式:

{
  type: 'ACTION_TYPE', // usually defined by a constant
  payload: { ... } // a payload of JSON serializable types
}

如果您的应用需要区分用户发起的操作和来自服务器或其他来源的操作,您可以考虑添加source密钥;为此,我个人在有效负载中使用单独的操作类型或数据。

我总是创建payload一个对象(从不是原始值),以便可以轻松添加数据而无需更改接收站点。例如,而不是

dispatch({type: ACTION_TYPE, payload: id})

我会推荐

dispatch({type: ACTION_TYPE, payload: {id: id}})

当然,其中一些可能取决于您使用的通量实现(如果有)。Facebook 调度程序是非常不可知的(您可以发送几乎任何您想要的东西),但有些实现需要特定的键(例如type等)。

Flux Standard Action是一个标准化 Flux 动作的项目。

简而言之,一个动作必须type, 并且可能error, payload, 或meta

例子

{
  type: 'ADD_TODO',
  payload: {
    text: 'Do something.'  
  }
}

对于错误:

{
  type: 'ADD_TODO',
  payload: new Error(),
  error: true
}

meta字段缩进显示“任何不属于有效负载的额外信息”。我还没有看到这个使用过,所以我会尝试坚持使用payload.