【问题标题】:What is the common way to handle successful REST POST operation in UI using React and Redux使用 React 和 Redux 在 UI 中处理成功的 REST POST 操作的常用方法是什么
【发布时间】:2016-06-24 17:06:07
【问题描述】:

我有一个 Thread 组件负责呈现特定线程的消息和一个组件来提交新消息。线程组件的状态由 Redux 管理,它提供异步操作,如 FETCH_MESSAGESPOST_MESSAGE。下面是简化的伪代码。

class Thread {
  messages: [] // This is actually a prop connected to Redux
  render = () => {
    messages.map(messageComponent)
    <SubmitMessageComponent />
  }
}

当服务器返回带有 id 的对象时,在 UI 中处理新消息的成功 POST 操作的常用方法是什么?将该对象推送到先前获取的消息数组中是否安全,或者我应该再次获取所有消息以确保一致性?第一次操作似乎很有效,但脱节。我正在考虑正确处理来自不同来源的并发 REST API 操作。重新获取所有内容始终可以确保状态的一致性,但在性能方面会是冗余的(想象一下有几乎无限量的消息)

是否有事实上的方法来处理 Web 应用程序用户界面中的创建操作?

【问题讨论】:

    标签: javascript rest design-patterns reactjs redux


    【解决方案1】:

    处理此问题的典型方法是通过处理POST_MESSAGE 操作的“消息”reducer 来减少状态,如您在问题中所述,即类似这样:

    export default function reducer(state = initialState, action = {}) {
        switch (action.type) {
            [...]
            case POST_MESSAGE:
                return {
                    ...state,
                    messages: {
                        ...state.messages,
                        [action.id]: { ...action.message }
                    }
                }
            [...]
        }
    }
    

    您没有解释获取新消息的方式和时间,但如果您使用一些 websocket,消息会从服务器推送到您的应用程序。

    也许另一种解决方案是在POST_MESSAGE 操作中添加一些时间戳,这样服务器就可以只响应当时新附加的消息,但不确定它是否真的是 RESTfull。

    【讨论】:

    • 我在安装组件时使用 http get 获取消息。这不是实时消息传递,但是当我需要新数据时,我会手动调度 fetch 操作。另外,我正在使用减速器组合,那么是否可以在 post reducer 中修改 fetch reducer 处理的状态块?
    • 您正在使用reducer 组合,但您的所有reducer 不断接收所有操作,因此响应fetch reducer 中的POST_MESSAGE 操作完全没问题(甚至有些必要)。我认为你不应该这样命名你的减速器,因为它们都在处理相同的状态部分,即:消息。
    猜你喜欢
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2016-03-27
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多