亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

React/Redux應用使用Async/Await的方法

 更新時間:2017年11月16日 09:58:45   作者:Touchumind  
本篇文章主要介紹了React/Redux應用使用Async/Await的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Async/Await是尚未正式公布的ES7標準新特性。簡而言之,就是讓你以同步方法的思維編寫異步代碼。對于前端,異步任務代碼的編寫經歷了 callback 到現在流行的 Promise ,最終會進化為 Async/Await 。雖然這個特性尚未正式發(fā)布,但是利用babel polyfill我們已經可以在應用中使用它了。

現在假設一個簡單的React/Redux應用,我將引入 Async/Await 到其代碼。

Actions

此例子中有一個創(chuàng)建新文章的 Action ,傳統方法是利用 Promise 結合 Redux-thunk 中間件實現。

import axios from 'axios'

export default function createPost (params) { 
  const success = (result) => {
    dispatch({
      type: 'CREATE_POST_SUCCESS',
      payload: result
    })
    return result
  }

  const fail = (err) => {
    dispatch({
      type: 'CREATE_POST_FAIL',
      err
    })
    return err
  }

  return dispatch => {
    return axios.post('http://xxxxx', params)
    .then(success)
    .catch(fail)
  }
}

現在將它改寫為 async/await 的實現:

import axios from 'axios'

export default function createPost (params) { 
  const success = (result) => {
    dispatch({
      type: 'CREATE_POST_SUCCESS',
      payload: result
    })
    return result
  }

  const fail = (err) => {
    dispatch({
      type: 'CREATE_POST_FAIL',
      err
    })
    return err
  }

  return async dispatch => {
    try {
      const result = await axios.post('http://xxxxx', params)
      return success(result)
    } catch (err) {
      return fail(err)
    }
  }
}

async和await是成對使用的,特點是使代碼看起來和同步代碼類似。

Components

同樣,在React組件中,也比較一下 Promise 和 Async/Await 的方法異同。

傳統地使用 Promise :

import React, { Component } from 'react' 
import { connect } from 'react-redux' 
import { createPost } from '../actions/post'

class PostEditForm extends Component { 
  constructor(props) {
    super(props)
  }

  contributePost = e => {
    e.preventDefault()

    // .... get form values as params

    this.props.createPost(params)
    .then(response => {
      // show success message
    })
    .catch(err => {
      // show error tips
    })
  }

  render () {
    return (
      <form onSubmit={this.contributePost}>
        <input name="title"/>
        <textarea name="content"/>
        <button>Create</button>
      </form>
    )
  }
}

export default connect(null, dispatch => { 
  return {
    createPost: params => dispatch(createPost(params))
  }
})(PostEditForm)

如果使用 Async/Await

import React, { Component } from 'react' 
import { connect } from 'react-redux' 
import { createPost } from '../actions/post'

class PostEditForm extends Component { 
  constructor(props) {
    super(props)
  }

  async contributePost = e => {
    e.preventDefault()

    // .... get form values as params

    try {
      const result = await this.props.createPost(params)
      // show success message
    } catch (err) {
      // show error tips
    }
  }

  render () {
    return (
      <form onSubmit={this.contributePost}>
        <input name="title"/>
        <textarea name="content"/>
        <button>Create</button>
      </form>
    )
  }
}

export default connect(null, dispatch => { 
  return {
    createPost: params => dispatch(createPost(params))
  }
})(PostEditForm)

可以見得,兩種模式, Async\Await 的更加直觀和簡潔,是未來的趨勢。但是目前,還需要利用babel的 transform-async-to-module-method 插件來轉換其成為瀏覽器支持的語法,雖然沒有性能的提升,但對于代碼編寫體驗要更好。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • react實現拖拽模態(tài)框

    react實現拖拽模態(tài)框

    這篇文章主要為大家詳細介紹了react實現拖拽模態(tài)框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 淺談React Native Flexbox布局(小結)

    淺談React Native Flexbox布局(小結)

    這篇文章主要介紹了淺談React Native Flexbox布局(小結),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • React Native中Mobx的使用方法詳解

    React Native中Mobx的使用方法詳解

    這篇文章主要給大家介紹了關于React Native中Mobx的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • React Native預設占位placeholder的使用

    React Native預設占位placeholder的使用

    本篇文章主要介紹了React Native預設占位placeholder的使用,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 前端面試題必會之前端react面試題

    前端面試題必會之前端react面試題

    在前端面試過程中經常會問到一些面試題,今天小編抽空給大家講解前端面試題之必會react面試題,需要的朋友可以參考下
    2023-03-03
  • 解決react中useState狀態(tài)異步更新的問題

    解決react中useState狀態(tài)異步更新的問題

    本文主要介紹了react中useState狀態(tài)異步更新的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • react開發(fā)教程之React 組件之間的通信方式

    react開發(fā)教程之React 組件之間的通信方式

    本篇文章主要介紹了react開發(fā)教程之React組件通信詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 解讀useState第二個參數的"第二個參數"

    解讀useState第二個參數的"第二個參數"

    這篇文章主要介紹了useState第二個參數的"第二個參數",具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • react創(chuàng)建項目啟動報錯的完美解決方法

    react創(chuàng)建項目啟動報錯的完美解決方法

    這篇文章主要介紹了react創(chuàng)建項目啟動報錯的完美解決方法,全稱為Node Package Manager,是隨同NodeJS一起安裝的包管理工具,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • react-native 配置@符號絕對路徑配置和絕對路徑沒有提示的問題

    react-native 配置@符號絕對路徑配置和絕對路徑沒有提示的問題

    本文主要介紹了react-native 配置@符號絕對路徑配置和絕對路徑沒有提示的問題,文中通過圖文示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01

最新評論