Einführung und Verwendung von Redux-Saga

Was ist es? redux-saga ist eine Middleware für Redux zur Lösung asynchroner Probleme. Sie können zu Baidu gehen, um nach Details zu suchen. Ich werde hier nicht zu viel vorstellen

Wie verwende ich Redux-Saga?

Schauen Sie sich zunächst meine Struktur an, aufgeteilt in vier Ordner

acions> bedeutet Aktionskonstanten> die Definition einiger Variablenreduzierer> bedeutet auch Aktionssagas> Middleware-Verarbeitung

Lassen Sie uns die Funktion der asynchronen Anforderungs-API implementieren

Erstellen Sie „constants/index.js“.

export const FETCH_REQUESTT = 'FETCH_REQUESTT'

Erstellen Sie acions/test.js

import { FETCH_REQUESTT} from './constants/index'
export const fetchuserr = () => {
  return {
    type: FETCH_REQUESTT 
  }

Erstellen Sie Reducers/index.js

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

export default combineReducers({
  uss
})

 Hier wird der CombineReducers von Redux verwendet. Was ist der spezifische Link? Klicken Sie auf den Link

Erstellen Sie „reducers/test.js“ erneut

const initialState = {
  isFetch: false,
  error: null,
  user: null
}

const u = (state = initialState, action = {}) => {
  switch (action.type) {
    case 'FETCH_REQUESTT':
      return {
        isFetch: true,
        error: null,
        user: null
      }
    case 'FETCH_SUCESS':
      return {
        isFetch: false,
        error: null,
        user: action.uu
      }
    case 'FETCH_FAIL':
      return {
        isFetch: false,
        error: action.errors,
        user: null
      }

    default :
      return state
  }
}

export default u

Erstellen Sie sagas/index.js

import { all } from 'redux-saga/effects'

import rootUserr from './test'

export default function * rootSaga () {
  yield all([ // 同时并发多个
    
    ...rootUserr,

  ])
}

 Erstellen Sie sagas/test.js erneut

import { call, takeEvery, put } from 'redux-saga/effects'

import axios from 'axios'

function * fetchuserr () {
  try {
    const users = yield call(axios.get, 'https://jsonplaceholder.typicode.com/todos')
    console.log('users' + users)
    yield put({ type: 'FETCH_SUCESS', uu: users })
  } catch (e) {
    yield put({ type: 'FETCH_FAIL', errors: e })
  }
}

function * userr () {
  yield takeEvery('FETCH_REQUESTT', fetchuserr) // 正在加载数据
}

// 使用数组导出
const rootUserr = [
  userr()
]

export default rootUserr

Wenn Sie Put, TakeEvery, Call nicht verstehen, können Sie Baidu verwenden

Die obige grundlegende Geschäftslogik wurde verarbeitet

Wir müssen es in die Eintragsdatei index.js einbinden

 


import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'


//中间件
import {Provider} from 'react-redux'  // 1,引用Provider
import {createStore,applyMiddleware} from 'redux'  //2,引用中间件

import createSagaMiddleware  from 'redux-saga'   //3,引入createSagaMiddleware  
import rootSaga from './pages/reduxsagas/sagas/index'; // 4,自己写的根 rootSaga

import rootReducer from './pages/reduxsagas/reducers/index'; //5,引入 reducers
const sagaMiddleware = createSagaMiddleware()  // 6, 创建中间件

const store = createStore(
  rootReducer,
    applyMiddleware(sagaMiddleware)
  )
)
// 4:启动 saga
sagaMiddleware.run(rootSaga);


ReactDOM.render(
 <Provider store={store}>

    <App />
 
  </Provider>,


 document.getElementById('root')
)

Nachdem der Import abgeschlossen ist, kann er auf der Seite verwendet werden

seiten/text.js

import React, { Component } from 'react'

import { connect } from 'react-redux'
import { Button, Card } from 'antd'
import {  fetchuserr } from './../reduxsagas/actions/counter'
class saga extends Component {


  render () {

    return (
      <div>

         <Button type='primary' onClick={() => this.props.fetchuserr()}>测试请求</Button>
       </div>
    )
  }
}

const mapStateToProps = (state) => {
  return {
    // state 对应的 key, 在 reducers/index.js 中声明。

    userta: state.uss
  }
}

export default connect(mapStateToProps, {  fetchuserr })(saga)

Du bist fertig!

GitHub verfügt über einen detaillierteren   Einführungslink

Supongo que te gusta

Origin blog.csdn.net/weixin_44414901/article/details/118967811
Recomendado
Clasificación