react請求資料非同步的方法:1、透過「npm i redux-thunk --save npm i axios --save」指令下載thunk;2、在store.js裡面引入thunk外掛;3、在需要模組的actionCreator裡引入中間件「redux-thunk」即可。
本教學操作環境:Windows10系統、react18.0.0版、Dell G3電腦。
react怎麼請求資料非同步?
react非同步請求資料方法。
關於react非同步請求資料有很多種方案。
1、saga (用了er6產生器函數)
2、promise
3、thunk
4、…
為什麼要用插件啊?是為了改造這個redux的action動作。如果非同步的話,我們發動作,actionCreator只有回傳對象,而異步這個插件能讓你隔一段時間再發這個動作,是為了改造動作用的。
本文用thunk,它可能不是最好的,但是是我用得比較習慣的。
一、下載
npm i redux-thunk --save npm i axios --save
二、引用。在store.js裡面引入插件,並使用。
import {createStore,applyMiddleware} from 'redux' //引入applyMiddleware import reducers from './reducers' //总的reducer import thunk from 'redux-thunk' //引入thunk var store = createStore(reducer,applyMiddleware(thunk)); //使用中间件 export default store;
三、發資料
在你需要模組的actionCreator裡:
import axios from 'axios' export default { getData(){ return (dispatch)=>{ // 引入中间件redux-thunk后,就可以延迟发出动作 axios.get('http://www.xmyxapp.com/api/tab/1?start=0').then((res)=>{ console.log(res) dispatch({ type:'GETDATA', list:res.data.data.items.list }) }) } } }
四、效果測試
在你需要的模組裡面的reducer :
var initState ={ list:[] } export const listReducer = (state = initState, action) => { var newState ={...state}; switch (action.type) { case 'GETDATA': newState.list = action.list // 这个action.list就是该模块actionCreator里传过来的值 return newState; default: return state } }
在store裡面總和的reducers:
import {combineReducers} from 'redux' import {listReducer} from '../components/list/reducer' var reducer = combineReducers({ list:listReducer }) export default reducer;
在你需要的模組裡面的元件:
import React, { Component } from 'react' import {connect} from 'react-redux' import actionCreator from './actionCreator'; class List extends Component { componentDidMount(){ this.props.getData(); // 调用异步方法获取数据 } render() { console.log(this.props); return ( <div> <ul> { this.props.list.list.map((item)=>{ return item.title?<li key={item.id}>{item.title}</li>:"" }) } </ul> </div> ) } } export default connect((state)=>state,actionCreator)(List);
推薦學習:《react影片教學》
以上是react怎麼請求資料異步的詳細內容。更多資訊請關注PHP中文網其他相關文章!