热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

React通过axios调用服务接口渲染无状态组件详解

一、axios概念:Axios是一个基于promise的HTTP库,可以用在浏览器和node.js中。(个人理解就是ajax,用来请求和

一、axios

概念:Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。(个人理解就是ajax,用来请求和响应数据)

安装命令:yarn add axios 或者 npm install axios

二、无状态组件

概念:无状态组件顾名思义就是没有状态的组件,如果一个组件不需要管理 state 只是纯的展示,那么就可以定义成无状态组件

(个人理解就是只有reder和dom就可以改变为无状态组件)

三、代码实例

请先学习Redux的使用:https://blog.csdn.net/qq_17025903/article/details/102628320

ShowList.js

import React,{ Component } from 'react';
import 'antd/dist/antd.css'; // or 'antd/dist/antd.less'
import { Input,Button,List } from 'antd';
import store from '../store';
import ShowListUI from '../UI/ShowListUI';
import {CHANGE_INPUT_VALUE,ADD_TODO_ITEM,DELETE_TODO_ITEM,INIT_LIST_ACTION} from '../store/actionTypes';
import {getInputChangeAction,getAddItemAction,getDeleteItemAction,initListAction} from '../store/actionCreators';
import axios from 'axios';//全局数据
// const data = [
// 'Racing car sprays burning fuel into crowd.',
// 'Japanese princess to wed commoner.',
// 'Australian walks 100km after outback crash.',
// 'Man charged over missing wedding girl.',
// 'Los Angeles battles huge wildfires.',
// ];class showList extends Component{constructor(props){super(props);//创建数据this.state=store.getState();this.handleInputChange=this.handleInputChange.bind(this);this.handleStoreChange=this.handleStoreChange.bind(this);this.handleBtnClick=this.handleBtnClick.bind(this);this.handleItemDelete=this.handleItemDelete.bind(this);//监听返回组件的数据,并且同步数据。store.subscribe(this.handleStoreChange);}render(){return()}// render(){// return(//

//
// {/*antd Input文本框*/}// // {/*antd button按钮*/}// // {/*列表*/}// (// // {item}// // )}// />//
//
//// )// }componentDidMount(){axios.get('http://localhost:8080/20190124_V1.0_SpringBoot/user/queryAllUserInfo').then((res)=>{const data=res.data;const newState=JSON.parse(JSON.stringify(data[0].age))console.log(res);console.log(res.data);const action=initListAction(data);console.log(action);store.dispatch(action);})}//actionhandleInputChange(e){
/* const action={type:CHANGE_INPUT_VALUE,value:e.target.value};*/const action=getInputChangeAction(e.target.value);//action传递到storestore.dispatch(action);}//点击提交添加到列表handleBtnClick(){
/* const action={type:ADD_TODO_ITEM};*/const action= getAddItemAction();store.dispatch(action);}//删除列表点击的内容handleItemDelete(index){// const action={// type:DELETE_TODO_ITEM,// index:index// }const action= getDeleteItemAction(index);store.dispatch(action);}//同步数据handleStoreChange(){this.setState(store.getState)}
}
export default showList;

antdList.js

import React from 'react';
import ShowList from '../components/ShowList';export default function() {return (

);
}

创建UI文件夹,拆分dom为ShowListUI.js

redux store 为index.js

//store 存数据传递reducer处理
import {createStore} from 'redux';
import reducer from './reducer';import React from "react";
//window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() 为 redux devtools工具配置
const store=createStore(reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());export default store;

reducer.js


import {CHANGE_INPUT_VALUE,ADD_TODO_ITEM,DELETE_TODO_ITEM,INIT_LIST_ACTION} from '../store/actionTypes';
import TodoItem from "@/components/TodoItem";
import React from "react";
//reducer可以接收state但是不能修改state
//处理数据
//defaultState store默认值
const defaultState={inputValue:'123',list:[1,2]
}
//state上一次存储的数据
//action传过来改变的
export default (state=defaultState,action)=>{console.log(state,action);if(action.type===CHANGE_INPUT_VALUE){//复制一份数据const newState=JSON.parse(JSON.stringify(state))//修改newState.inputValue=action.value;return newState;}//添加到列表if(action.type===ADD_TODO_ITEM){const newState=JSON.parse(JSON.stringify(state))newState.list.push(newState.inputValue);newState.inputValue='';return newState;}//删除点击列表内容if(action.type===DELETE_TODO_ITEM){const newState=JSON.parse(JSON.stringify(state))newState.list.splice(action.index,1);return newState;}if(action.type===INIT_LIST_ACTION){//复制一份数据const newState=JSON.parse(JSON.stringify(state))newState.list2=[ ...newState.list];action.data.map((item)=>{newState.list2.push(item.age);})newState.list=newState.list2;return newState;}return state;
}

actionTypes.js

//定义常量
export const CHANGE_INPUT_VALUE='change_input_value';
export const ADD_TODO_ITEM='add_todo_item';
export const DELETE_TODO_ITEM='delete_todo_item';
export const INIT_LIST_ACTION='init_list_action';

actionCreators.js

import {CHANGE_INPUT_VALUE,ADD_TODO_ITEM,DELETE_TODO_ITEM,INIT_LIST_ACTION} from '../store/actionTypes';export const getInputChangeAction=(value)=>({type:CHANGE_INPUT_VALUE,value:value
});
export const getAddItemAction=()=>({type:ADD_TODO_ITEM
});
export const getDeleteItemAction=(index)=>({type:DELETE_TODO_ITEM,index:index
});export const initListAction=(data)=>({type:INIT_LIST_ACTION,data:data
});

请求的接口为springboot的 queryAllUserInfo

四、完成结果

list:[1,2]数组添加了请求服务的age,并且可以点击删除。


推荐阅读
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • Python中的PyInputPlus模块原文:https ... [详细]
author-avatar
新手php
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有