Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用React和Redux在UI中处理成功REST POST操作的常用方法是什么_Javascript_Rest_Design Patterns_Reactjs_Redux - Fatal编程技术网

Javascript 使用React和Redux在UI中处理成功REST POST操作的常用方法是什么

Javascript 使用React和Redux在UI中处理成功REST POST操作的常用方法是什么,javascript,rest,design-patterns,reactjs,redux,Javascript,Rest,Design Patterns,Reactjs,Redux,我有一个线程组件负责呈现特定线程的消息,还有一个组件提交新消息。线程组件的状态由Redux管理,Redux提供异步操作,如获取消息和发布消息。下面是简化的伪代码 class Thread { messages: [] // This is actually a prop connected to Redux render = () => { messages.map(messageComponent) <SubmitMessageComponent />

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

class Thread {
  messages: [] // This is actually a prop connected to Redux
  render = () => {
    messages.map(messageComponent)
    <SubmitMessageComponent />
  }
}
类线程{
消息:[]//这实际上是一个连接到Redux的道具
渲染=()=>{
messages.map(messageComponent)
}
}
当服务器将id为的对象发回时,处理UI中新消息的成功后期操作的常用方法是什么?将该对象推送到先前获取的消息数组是否安全,还是应该再次获取所有消息以确保一致性?第一次手术似乎很有效,但并不连贯。我考虑正确处理来自不同来源的并发RESTAPI操作。重新获取所有内容将始终确保状态的一致性,但在性能方面是冗余的(假设有接近无限量的消息)


是否有处理web应用程序用户界面中创建操作的实际方法?

处理此操作的典型方法是通过“消息”缩减器来减少状态,该缩减器处理您在问题中所述的
POST_MESSAGE
操作,例如:

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。

处理这一问题的典型方法是通过“消息”减少状态减速机处理您在问题中所述的
POST_消息
操作,例如:

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。

im在安装组件时使用http get获取消息。这不是实时消息传递,但当我需要新数据时,我会手动调度获取操作。另外,我使用的是reducer组合,那么是否可以在post reducer中修改由fetch reducer处理的状态块?您使用的是reducer组合,但您的所有reducer都会接收所有操作,因此在fetch reducer中响应
post_消息
操作是完全正确的(甚至有些必要的)。我认为您不应该这样命名您的reducer,因为它们都处理相同的状态片段,即:messages.im在安装组件时使用http get获取消息。这不是实时消息传递,但当我需要新数据时,我会手动调度获取操作。另外,我使用的是reducer组合,那么是否可以在post reducer中修改由fetch reducer处理的状态块?您使用的是reducer组合,但您的所有reducer都会接收所有操作,因此在fetch reducer中响应
post_消息
操作是完全正确的(甚至有些必要的)。我认为你不应该这样命名你的减缩器,因为它们都处理相同的状态片段,即:消息。