dva.js 用法详解:列表展示
2018-06-24 01:41:00来源:未知 阅读 ()
本教程案例github:https://github.com/axel10/dva_demo-Counter-and-list/tree/master
这次主要通过在线获取用户数据并且渲染成列表这个案例来演示dva.js。
整个开发流程概括下来应该是:
编写用户列表model(数据模型)-> 编写修改model的方法 -> 编写服务接口 -> 编写组件 -> 将组件与dva.js连接 -> 将dva.js提供的接口(dispatch)和数据模型通过props传入组件 -> 渲染。
我们先从第一步开始。
编写用户列表model及修改方法:(src/models/users.js)
import * as userService from '../services/userService' export default { namespace: "users", state: { list:[] }, reducers: { //用来修改数据模型的state。 save(state, {payload:{data}}) { //涉及到es6的拆包写法。 state.list = data; return {...state} }, removeItem(state, {item}) { state.list = state.list.filter(function (lItem) { return item.id !== lItem.id }); return{...state} } }, effects: { //effects指的是涉及到异步请求的方法。通常用来调用服务获取数据。这里要注意如果effects的方法名与reducers中存在重复的话容易造成死循环。 * fetch(payload,{put, call}) { const data = yield call(userService.fatchData); yield put({type: "save", payload: data}) }, * fetchRemoveItem({item},{put,call}){ const result = yield call(userService.fetchRemoveItem,item.id); if (result){ console.log(true); yield put({type:"removeItem",item}) }else{ console.log(false); } } }, subscriptions: { //触发器。setup表示初始化即调用。其他用法见官方文档。https://github.com/sorrycc/blog/issues/62 setup({dispatch}) { dispatch({type: 'fetch'}) } } }
编写完毕后不要忘了在src/index.js中注册数据模型:
app.model(require('./models/users').default);
编写服务接口:(src/services/userService.js)
import request from "../utils/request"; export function fatchData() { return request("/api/users") } export function fetchRemoveItem(query) { console.log(query); return true }
这里涉及到mock数据。方法为修改根目录下的.webpackrc文件:
{ "proxy": { "/api": { "target": "http://jsonplaceholder.typicode.com/", "changeOrigin": true, "pathRewrite": { "^/api": "" } } } }
接下来编写组件:
先从路由组件开始:
import {connect} from 'dva' import ListBody from "../components/ListBody" import React from "react"; class List extends React.Component { render() { return ( <ListBody {...this.props} /> //将自身的props传给子组件。连接之后的组件可以拥有dispatch、索引后的数据模型。 ) } } function mapStateToProps(state) { //将数据模型索引到props。 return {users:state.users} } export default connect(mapStateToProps)(List) //将组件与数据模型相连接。
这里要重点说明:dispatch就是在connect的时候传入的,用来做组件与数据模型之间的交互。
之后是ListBody组件:
import React from 'react'; import {Link} from 'dva/router' class ListBody extends React.Component{ removeUserItem(item){ this.props.dispatch({type:"users/fetchRemoveItem",item}) //通过props获取dispatch方法,users表示数据模型(namespace),fetchRemoveItem表示reducers或者effects。 } render(){ const that = this; let userList = []; let userData = this.props.users.list; //users:数据模型,list:数据模型中的state
if (userData.length>=1){ userData.forEach(function (item, index) { userList.push(<li key={index} onClick={that.removeUserItem.bind(that,item)}>{item.name}</li>) }) }return( <div> <h2>请尝试点击条目。</h2> {userList} </div> ) } } export default ListBody;
完毕后添加路由。
import React from 'react'; import { Router, Route, Switch,Redirect } from 'dva/router'; import list from './routes/list' function RouterConfig({ history }) { return ( <Router history={history}> <Switch> <Route path="/list" exact component={list} /> <Redirect to="/list"/> </Switch> </Router> ); } export default RouterConfig;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Javascript继承,再谈
下一篇:小刘同学的第七十七篇博文
- Jquery图形报表插件 jqplot简介及参数详解 2020-03-25
- JavaScript函数表达式详解及实例 2020-03-25
- javascript 中关于array的常用方法详解 2020-03-16
- 微信小程序开发图片拖拽实例详解 2020-03-16
- JS之相等操作符详解 2020-03-12
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash