当前位置: 首页 > 面试题库 >

React Native Redux:已调度操作,返回结果

轩辕晔
2023-03-14
问题内容

在redux中,当调度一个动作时,reducer将相应地更改状态,调用该动作的组件也可以访问该状态(由Provider通过props传递)。我对吗?

状态是访问组件中操作结果的唯一方法吗?(已调用操作的组件)。

如何将回调函数传递给操作,然后使用该方法将结果发送回组件?


问题答案:

在redux中,当调度一个动作时,reducer将相应地更改状态,调用该动作的组件也可以访问该状态(由Provider通过props传递)。我对吗?

当在redux模式中触发动作时,所有的reducer都会运行,但是只有要对这种动作进行动作的reducer才会在商店上执行reduce工作。有时您可以执行不返回操作类型的操作。如果我想让reducer减少应用程序商店中的状态,通常会返回一个动作对象,否则我就不需要这样做。记住,减少状态时,将重新呈现其值的所有组件。

状态是访问组件中操作结果的唯一方法吗?(已调用操作的组件)。

我认为您可以设计一个动作以在执行后返回结果,但是您不会完全使用redux模式。

如何将回调函数传递给操作,然后使用该方法将结果发送回组件?

我以前从未尝试过,但是我认为Promise是一个不错的选择。我总是使用axios从服务器获取结果,如果我有结果,则派遣另一个axios供reducer更新状态,否则派遣一个reducer进行错误处理。

//actions
const axios from 'axios'
const FETCH_ITEMS = 'FETCH_ITEMS'
const FETCH_ITEMS_RECEIVED = 'FETCH_ITEMS_RECEIVED'
const FETCH_ERROR = 'FETCH_ERROR'
const SERVER_BASE_URL = 'localhost:4000/'

export function itemsReceive(items){
   return {
      type: FETCH_ITEMS_RECEIVED,
      items
    }
}

export function itemsFetchError(){
   return {
      type: FETCH_ERROR,
      errorMsg: 'There was an issue fetching items.'
    }
}

//This function shall dispatch the two actions above in case we have the expected result or an error.
export function fetchItems(){
    return dispatch => {
       axios.get(SERVER_BASE_URL  + 'items').
        then(function(res){
           const { data } = res
             if(data.status === 0){ //data.status is just a status sent by my server to show the response is good.
               const items = data.response
               dispatch(itemsReceive(items))
             }else{
               dispatch(itemsFetchError())
             }
        }).catch(function(err)){//this error here is usually caused by network disruption
              dispatch(itemsFetchError())
        }
    }
}


 类似资料:
  • 问题内容: Redux thunk成功调度某些动作后,是否可以从动作创建者那里返回承诺/信号,并解决? 考虑以下动作创建者: 当Redux分派POST_SUCCESS或POST_ERROR操作时,我想在调用 doPost 操作创建者后 在组件中 异步调用某些函数。一种解决方案是将回调传递给动作创建者本身,但这会使代码混乱并且难以掌握和维护。我也可以在while循环中轮询Redux状态,但是那样效率

  • 我有一个自定义钩子,它返回一个动作。父组件“容器”使用自定义钩子并将动作作为道具传递给子组件。 从子组件执行操作时,实际分派发生两次。现在,如果子级直接使用钩子并调用操作,则调度只发生一次。 如何复制它: 打开下面的沙盒,打开chrome上的devool,这样你就可以看到我添加的控制台日志。 https://codesandbox.io/s/j299ww3lo5?fontsize=14 主要的js

  • 我们计划在客户机-服务器模式下使用Infinispan。该架构有许多客户端(客户端1、客户端2等)和分布式infinispan网络。 我们需要定期更新缓存中的数据,比如每5小时更新一次。所有客户端都可以更新数据。如果其中一个(比如客户端1)正在更新,我们需要防止其他人做同样的工作。更新完成后,所有客户端再等待5个小时,其中任何一个客户端都将再次进行更新。 Infinispan为此提供了版本化操作,

  • 我运行的代码与这个问题中的问题类似,只是从每个文档中提取数组,并将它们的元素添加到全局数组列表中。之后,在,我对该数组执行一个操作并返回。但是,如果我登录。d从onSuccess侦听器中获取全局ArrayList大小,它给出了正确的答案,但如果我在集合之外这样做。get()它总是给出0。我的问题是,我无法从onSuccess中返回,因为这不会返回我的整个函数,所以我需要在收集之后执行。get(),

  • 主要内容:以下是纠正/补充内容:先来先服务(FCFS)调度算法根据其到达时间简单地调度作业。 就绪队列中第一个工作将首先获得CPU。 工作到达时间越少,工作得到的CPU就越快。 如果第一个进程的突发时间是所有作业中最长的,则FCFS调度可能会导致饥饿问题。 FCFS的优势 简单 容易 先到先得 FCFS的缺点 调度方法是非抢先式的,该进程将运行到完成。 由于算法的非抢先性,可能会出现饥饿问题。 尽管实现起来很容易,但由于平均等待

  • 主要内容:进程控制块中保存了什么?,为什么需要调度?在像MS DOS这样的单编程系统中,当进程等待任何I/O操作完成时,CPU仍然是空闲的。 这是一个开销,因为它浪费时间并导致饥饿问题。 但是,在多程序系统中,CPU在进程的等待时间内不会保持空闲状态,而是开始执行其他进程。 操作系统必须定义CPU将被给予哪个进程。 在多程序系统中,操作系统调度CPU上的进程以获得最大的利用率,此过程称为CPU调度。 操作系统使用各种调度算法来调度过程。 这是短期调