react dva发送请求详解(转)

摘要:
1.要在jsx页面上分派任务,可以使用这个。道具。componentWillMount生命周期内的分派方法。您需要首先引用连接模块。如果不引用,将报告错误,请从“dva”导入{connect};类中的操作:类名extendsAction。组件{constructor(props){super(prop)}componentWillMount(

1,在jsx页面派发任务,可以在componentWillMount的生命周期内,
使用this.props.dispatch方法派发,需要先引用connect模块,不引用会报错

import { connect } from 'dva';

在类中操作:

class 类名 extends React.Component {
  constructor(props){
    super(props)
  }
  componentWillMount() {
    this.props.dispatch({
      type: '自定义的namespace/effects中的方法名',
      payload: {//可以不填
        参数名:参数值
      },
    })
  }
  render() {
  //查看网络请求传递出来的内容
  console.log(this.props.data)
  //this.props.data为mapStateToProps中的data
    return (
      <div></div>
    )
  }
}

const mapStateToProps = (state) => {  //见名知意,把state转换为props
  //可以打印state看看数据结构,然后放到data里
  return {
    data:state.data
  };
};
export default connect(mapStateToProps)(类名)

2,services文件夹下创建单独的发送网络请求js,比如service.js

import request from '../utils/request';

export function models中要调用的方法名 (参数) {
  return request(`接口地址?${参数}`) //get方法请求
    /*
   return request(`接口地址`,{
    method: 'post',
    headers: {
      'Content-Type': 'application/json; charset=utf-8'
    },
    body: JSON.stringify({
      参数名:参数
    })
  })
  */
  
}

3,models文件夹下创建操作数据的js,比如data.js

import * as 自定义名 from '../services/service';

export default {
  namespace: '第一步中的namespace',

  state: {
    data: ''   //reducers中接收数据
  },

  subscriptions: {
    setup({ dispatch, history }) {  // eslint-disable-line
    },
  },

  effects: {

    *供组件调用的方法名({ payload: { 参数 }}, { call, put }) {

      const result = yield call(自定义名.service中的方法名, 参数);//如果使用  {参数}  ,则是一个对象

      //把请求的数据保存起来
      //数据更新会带动页面重新渲染
      yield put({
        type: 'save',  //reducers中的方法名
        payload:{
          data: result.data  //网络返回的要保留的数据
        }
      })
    }
  },

  reducers: {
     save(state, { payload: { data } }) {
       return {
         ...state, 
          data: data  //第一个data是state的,第二个data是payload的
      };
     },
  },
}

使用data.js可以在主js中:

import dva from 'dva';
const app = dva();
app.model(require('./models/data'));

第二步中引用的request.js⬇️,不需要改动

import fetch from 'dva/fetch';

function parseJSON(response) {
  return response.json();
}

function checkStatus(response) {
  if (response.status >= 200 && response.status < 300) {
    return response;
  }

  const error = new Error(response.statusText);
  error.response = response;
  throw error;
}

/**
 * Requests a URL, returning a promise.
 *
 * @param  {string} url       The URL we want to request
 * @param  {object} [options] The options we want to pass to "fetch"
 * @return {object}           An object containing either "data" or "err"
 */
export default function request(url, options) {
  return fetch(url, options)
    .then(checkStatus)
    .then(parseJSON)
    .then(data => ({ data }))
    .catch(err => ({ err }));
}

参考:https://www.jianshu.com/p/6482f4785929

https://www.jianshu.com/p/5aa95d62339c

https://blog.csdn.net/hzxOnlineOk/article/details/102930679

免责声明:文章转载自《react dva发送请求详解(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ubuntu下crontab编辑方法的设定IBM本本常识,答记者问下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

web前端图片上传(2)

今天发现了一种ajax上传图片的方式,是以前没有用过的,首先来说下为什么要用这种方式。是因为原来后台是用的form表单的方式来提交表单数据的。但是觉得呢,这种方式不太好,因为要刷新页面,前台只用控制台看不到传输的参数(如果哪位大神知道怎么看到,请不吝赐教),所以我们就改成了ajax的方式,结果后台老哥说,前端改改就行了,后端不用改。然后我去找到了这种aja...

django:开发一个下载图片的接口

html页面如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form a...

React中的虚拟DOM

我们知道,当组件的state和props发生变化的时候,render函数就会重新执行,组件就会被重新渲染,这样是性能非常低的。因此,react引入了虚拟DOM. 虚拟DOM是什么呢?虚拟DOM就是一个JS对象,用它来描述真实DOM。 当state发生变化时,render函数会重新执行渲染页面。如果我们自己来做这个功能,那该怎样实现呢? 方案一: 1. 定义...

vue的富文本编辑器使用,并且添加显示当前输入字数

下载: npm install vue-quill-editor --save main.js中引入 //富文本编辑器 import VueQuillEditor from 'vue-quill-editor'; import 'quill/dist/quill.core.css' import 'quill/dist/quill.snow.css'...

react native debugger 远程调试redux工具

react native是现在比较火的App开发技术。使用react native开发的朋友一般也会使用到facebook提出的Flux概念框架,而redux框架是使用的比较多的。 redux的一大原则是单一数据源,只存在唯一的state树,以前由于工具的缺失,react native查看不了state,刚使用redux的时候按照文档安装了chrome扩展...

go-gin-api 规划目录和参数验证(二)

概述首先同步下项目概况:上篇文章分享了,使用 go modules 初始化项目,这篇文章咱们分享:    规划目录结构    模型绑定和验证    自定义验证器    制定 API 返回结构废话不多说,咱们开始吧。规划目录结构  ├─ go-gin-api │ ├─ app │ ├─ config...