如何在react-redux中发出HTTP请求?

时间:2016-09-30 15:20:31

标签: reactjs redux react-redux jsx

我刚开始反应,我有点迷失。我正在尝试创建登录页面并发出http发布请求。现在我只是想让任何类型的HTTP请求正常工作,所以我使用了请求bin,我在npm包(https://www.npmjs.com/package/redux-react-fetch)的文档中找到了这个基本操作:

export function updateTicket(ticketId, type, value){
  return {
    type: 'updateArticle',
    url: `http://requestb.in/1l9aqbo1`,
    body: {
      article_id: ticketId,
      title: 'New Title'
    },
    then: 'updateTicketFinished'
  }
}

所以,在写完一个动作后,我该怎么办?我如何实际让我的应用程序调用并使用该操作? npm包的文档提到了在我的商店中设置状态的东西,我需要先设置一些东西吗?

1 个答案:

答案 0 :(得分:34)

您可以尝试以下任何一项。我已经使用了fetchaxios两种方法,效果非常好。然而,试试superagent

  1. 要发出请求,您可以使用fetch fetch-polyfill兼容所有浏览器(link
  2. Axios库。 (link
  3. 默许承诺。(link
  4. 如果使用fetch,则需要使用polyfill,因为IE和safari尚不支持。但是使用polyfill它可以很好地工作。您可以查看链接,了解如何使用它们。

    所以你要做的就是在你的动作创建者中,你可以使用上述任何一种方法调用API。

    <强> FETCH

    function fetchData(){
        const url = '//you url'
        fetch(url)
        .then((response) => {//next actions})
        .catch((error) => {//throw error})
    }
    

    <强> AXIOS

     axios.get('//url')
      .then(function (response) {
        //dispatch action
      })
      .catch(function (error) {
        // throw error
      });
    

    那就是API调用,现在进入状态。在redux中,有一个状态可以处理您的应用。我建议你应该通过redux基础知识,你可以找到here。因此,一旦您的api调用成功,您需要使用数据更新您的状态。

    获取数据的行动

     function fetchData(){
        return(dispatch,getState) =>{ //using redux-thunk here... do check it out 
            const url = '//you url'
            fetch(url)
            .then (response ) => {dispatch(receiveData(response.data)} //data being your api response object/array
            .catch( error) => {//throw error}
        }
      }
    

    更新州的行动

       function receiveData(data) {
          return{
            type: 'RECEIVE_DATA',
            data
         }
       }
    

    <强>减速

       function app(state = {},action) {
          switch(action.types){
              case 'RECEIVE_DATA':
                     Object.assign({},...state,{
                       action.data 
                         }
                      }) 
              default:
                 return state
          }
       }