欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

記錄一篇關(guān)于redux-saga的基本使用過程

 更新時(shí)間:2018年08月18日 16:21:16   作者:Chiu  
這篇文章主要介紹了記錄一篇redux-saga的基本使用過程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

安裝

npm install --save redux
npm install --save redux-saga

配置action

actionType

創(chuàng)建文件src/actions/types.js,在types.js文件中添加需要的action類型

export const TEST1_ACTION = 'test1';
export const SET_TEST2_ACTION = 'change_test2';
export const SET_TEST3_ACTION = 'change_test3';

createActions

創(chuàng)建文件src/actions/test.js,在test.js文件中編寫action

import {TEST1_ACTION, SET_TEST2_ACTION, SET_TEST3_ACTION} from './types

// 獲取test1的值
export const getTest1Action = () => {
  return {
    type:TEST1_ACTION
  }
}

// 寫入test2的值
export const setTest2Action = (testValue) => {
  return {
    type:SET_TEST2_ACTION,
    payload:testValue
  }
}

// 寫入test3的值
export const setTest3Action = (payload) => {
  return {
    type:SET_TEST3_ACTION,
    payload
  }
}

配置reducer

因?yàn)橐粋€(gè)項(xiàng)目中可能會有很多地方需要用到reducer,所以把這些reducer文件分開管理比較好,比如:test.js,settings.js,auth.js等等。

創(chuàng)建文件src/reducers/test.js,編寫test reducer

import {TEST1_ACTION, SET_TEST2_ACTION, SET_TEST3_ACTION} from '../actions/types

// 初始化
const initTest = {
  test1:'這是test1初始化的值',
  test2:'這是test2初始化的值',
  test3:'這是test3初始化的值'
}

export default (state = initTest, action) =>{
  switch (action.type) {
    case TEST1_ACTION:{
      return {
        ...state
      }
    }
    case SET_TEST2_ACTION:{
      return {
        ...state,
        test2:action.payload
      }
    }
    case SET_TEST3_ACTION:{
      return {
        ...state,
        test3:action.payload.testValue
      }
    }
    default:
    return state
  }
}

創(chuàng)建文件src/reducers/index.js

import {combineReducers} from 'redux'
import test from './test'


const reducers = combineReducers({
  test,
  /*
  還可以繼續(xù)加入其它的reducer文件,比如:
  settings,
  auth,
  */
});

export default reducers;

配置saga

創(chuàng)建文件src/sagas/test.js

import {all,fork,put,takeEvery} from 'redux-saga/effects'
import {setTest2Action, setTest3Action} from "../actions/test"
import {SET_TEST2_ACTION, SET_TEST3_ACTION} from "../actions/actionTypes"
import axios from 'axios'

function* changeTest2 (testValue) {
  yield put(setTest2Action(testValue))
}

function* changeTest3 (obj) {
  try{
    // 這里使用axios從網(wǎng)絡(luò)獲取數(shù)據(jù)演示,沒有安裝axios的需要先安裝它。
    // 期間響應(yīng)狀態(tài)碼判斷就省略了,就當(dāng)它每次請求都成功獲得testValue的數(shù)據(jù)
    response = axios.get('http://localhost/api/test')
    
    // 假設(shè)response.data里面有一個(gè)key為testValue的值
    yield put(setTest3Action(response.data))
  } catch (error) {
    console.error('這里也可以yield put一個(gè)createAction,這里不作演示')
  }
}

export function* setTest2 () {
  yield takeEvery(SET_TEST2_ACTION, changeTest2)
}

export function* setTest3 () {
  yield takeEvery(SET_TEST3_ACTION, changeTest3)
}

export default function* testSaga(){
  yield all([
    fork(setTest2),
    fork(setTest3),
  ])
}

創(chuàng)建文件src/sagas/index.js

import {all} from 'redux-saga/effects';
import testSaga from './test'

export default function* rootSaga() {
  yield all([
    testSaga()
  ]);
}

配置store

import {applyMiddleware, compose, createStore} from 'redux';
import reducers from '../reducers/index';
import createSagaMiddleware from 'redux-saga';
import rootSaga from '../sagas/index';


const sagaMiddleware = createSagaMiddleware();

// 使用數(shù)組是為了方便以后繼續(xù)添加中間件
const middlewares = [sagaMiddleware];

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(
 reducers,
 composeEnhancers(applyMiddleware(...middlewares))
);

sagaMiddleware.run(rootSaga);

export default store;

App入口文件路由配置

import React from 'react'
import {Provider} from 'react-redux'
import store from './store'
import Test from './Test/'
import {BrowserRouter, Route, Switch} from "react-router-dom"

const MainApp = () =>
 <Provider store={store}>
  <BrowserRouter>
   <Switch>
    <Route path="/" component={Test}/>
   </Switch>
  </BrowserRouter>
 </Provider>;

export default MainApp

Test.js

src/Test/index.js

import React from 'react'
import {connect} from 'react-redux'
import {setTest2Action, setTest3Action} from '../actions/test'

class Test extends React.Component {
  render() {

    const {test1, test2, test3, setTest2Action, setTest3Action} = this.props

    return {
      <div>
        <div>
          test1的值為:{test1}
        </div>
        <div>
          test2的值為:{test2}
          <button onClick={setTest2Action('abc')}>設(shè)置test2的值為 abc</button>
        </div>
        <div>
          test3的值為:{test3}
          <button onClick={setTest3Action()}>從網(wǎng)絡(luò)獲取test3的值</button>
        </div>
      </div>
    }
  }
}

const mapStateToProps = ({test}) => {
  const {test1,test2,test3} = test;
  return {test1,test2,test3}
}

export default connect (mapStateToProps,{setTest2Action, setTest3Action})(Test)

至此,即可運(yùn)行 npm start進(jìn)行測試了

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • js前端登錄加密解決方案

    js前端登錄加密解決方案

    項(xiàng)目中需要前端書寫登錄頁面,用戶輸入賬號密碼,本文主要介紹了js前端登錄加密解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • JS暴虐查找法簡潔版

    JS暴虐查找法簡潔版

    有過相關(guān)經(jīng)驗(yàn)的朋友都知道,Jscript的效率畢竟有限,在數(shù)組中查找數(shù)據(jù)時(shí)如果用常規(guī)的算法來做執(zhí)行起來會很慢。
    2008-07-07
  • 簡單的js圖片輪換代碼(js圖片輪播)

    簡單的js圖片輪換代碼(js圖片輪播)

    這篇文章主要介紹了簡單的js圖片輪換代碼(js圖片輪播),需要的朋友可以參考下
    2014-05-05
  • 常見效果實(shí)現(xiàn)之返回頂部(結(jié)合淡入、淡出、減速滾動)

    常見效果實(shí)現(xiàn)之返回頂部(結(jié)合淡入、淡出、減速滾動)

    返回頂部是經(jīng)常會見到的效果,代碼比較簡單,使用2個(gè)對象和一個(gè)主函數(shù)。職責(zé)明確方便復(fù)用
    2012-01-01
  • JavaScript實(shí)現(xiàn)tab欄切換效果

    JavaScript實(shí)現(xiàn)tab欄切換效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)tab欄切換效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • js刷新頁面location.reload()用法詳解

    js刷新頁面location.reload()用法詳解

    這篇文章主要介紹了js刷新頁面location.reload()用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 微信小程序之?dāng)?shù)據(jù)緩存的實(shí)例詳解

    微信小程序之?dāng)?shù)據(jù)緩存的實(shí)例詳解

    這篇文章主要介紹了微信小程序之?dāng)?shù)據(jù)緩存的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • js模仿java的Map集合詳解

    js模仿java的Map集合詳解

    這篇文章主要介紹了js模仿java的Map集合的相關(guān)資料,Java中某些最常用的集合類是List和Map,感興趣的小伙伴們可以了解一下
    2016-01-01
  • 微信小程序冒泡事件及其阻止方法實(shí)例分析

    微信小程序冒泡事件及其阻止方法實(shí)例分析

    這篇文章主要介紹了微信小程序冒泡事件及其阻止方法,結(jié)合實(shí)例形式分析了事件分類、冒泡及相應(yīng)阻止操作方法,需要的朋友可以參考下
    2018-12-12
  • js捆綁TypeScript聲明文件的方法教程

    js捆綁TypeScript聲明文件的方法教程

    TypeScript 是 JavaScript 的超集,相比 JavaScript,其最關(guān)鍵的功能是靜態(tài)類型檢查 (Type Guard)。下面這篇文章主要給大家介紹了關(guān)于js捆綁TypeScript聲明文件的相關(guān)資料,需要的朋友可以參考下。
    2018-04-04

最新評論