React Native Redux:调度Action,返回结果

时间:2017-02-01 13:50:58

标签: reactjs react-native redux react-redux redux-thunk

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

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

如何将回调函数传递给操作,并使用它将结果发送回组件?

2 个答案:

答案 0 :(得分:5)

  

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

当在redux模式中触发操作时,所有reducers都会运行,但只有作用于此类操作的reducer才会在存储上执行reduce操作。有时您可以执行不返回操作类型的操作。如果我想让reducer减少应用程序商店中的状态,我通常会返回一个操作对象,否则我不需要。请记住,当状态减少时,所有渲染它的值的组件都会被重新渲染。

  

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

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

  

如何将回调函数传递给操作,并使用它将结果发送回组件?

我之前从未尝试过,但我认为承诺是一个不错的选择。我总是使用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())
        }
    }
}

答案 1 :(得分:1)

  

在redux中,当调度动作时,reducer将改变状态   因此,称之为动作的组件也具有   访问状态(通过提供商传递道具)。我是对的吗?

是的,你是对的。调度操作时,您需要指定操作创建者,在操作创建者内部可以触发同步或异步操作(使用thunk或saga),每个操作创建都有actionType和payload(可选。在action creator中调用action,所有reducers将获得通知并匹配通过行动传递的类型。

  

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

作为redux的最佳实践,应该通过reducer(作为纯函数)更改状态,如果您正在侦听该状态,则将其作为props传递给组件。

  

如何将回调函数传递给操作,并将其用于   将结果发送回组件?

你可以将回调函数传递给动作创建者,动作创建者只是一个函数。