写在前面
1 新建页面
1.1 在src->pages->『新建文件夹』NewPage->『新建js文件』NewPage.js 和 『新建less文件』NewPage.less
1.2 在NewPage.js填入如下代码
// 必须引入
import React, { PureComponent } from “react”;
//面包屑
import PageHeaderWrapper from “@/components/PageHeaderWrapper”;
// 引入阿里dva框架,不然不能和服务端交互,必须引入
import { connect } from “dva”;
// 引入less
import styles from “./NewPage.less”;
// 这个注解解释起来有点麻烦,但要注意以下几点
// 1.@connect必须放在export default class前面
// 2.这个不写,你在这个页面里面获取不到服务器返回给你的数据
// 3.采用解构赋值的方式,第一个参数newPage是命名空间,我们数据就是从这里拿到的
@connect(({ newPage, loading }) => ({
data: newPage.data, // 将data赋值给
loading: loading
}))
class NewPage extends PureComponent {
// componentWillMount渲染之前调用,一般处理ajax异步回来的数据,
// 等下面render渲染的时候好绑定
componentWillMount() {
console.log(“渲染之前调用”);
console.log(“之调用一次”);
}
// 每次调用render之前渲染
componentDidMount() {
// 分发器,用dispatch一定要写@connect注解
const { dispatch } = this.props;
// 分发器调用models发起请求,具体流程是dispatch=>models=>services
dispatch({
// newPage命名空间,fetch是该文件中的方法,对应src/models/newPage.js,因为newPage的namespace的值newPage
type: “newPage/fetch”,
// 参数,一般采用json格式
payload: { a: “1”, b: “2” }
});
}
render() {
let { data,loading } = this.props;
console.log(loading);
return (
<PageHeaderWrapper>
<div>
姓名:{data.userName}<br/>
学号:{data.studentNo}<br/>
年龄:{data.age}<br/>
性别:{data.sex}<br/>
</div>
</PageHeaderWrapper>
);
}
}
export default NewPage;
1.3 在NewPage.less填入如下代码
//样式文件默认使用 CSS Modules,如果需要,你可以在样式文件的头部引入 antd 样式变量文件:
//这样可以很方便地获取 antd 样式变量并在你的文件里使用,有利于保持页面的一致性,也方便实现定制主题。
@import “~antd/lib/style/themes/default.less”;
2 创建Models
2.1 在src->models->『新建js文件』NewPage.js
2.2 填入以下代码
// 导入接口文件,并采用解构的方式,
// 将newPage.js的文件里面的queryUser1赋值给这里的queryUser1
import { queryUser1 } from “@/services/newPage”;
export default {
namespace: “newPage”,
// State 是储存数据的地方,收到 Action 以后,会更新数据。
state: {
data: {}
},
effects: {
/**
* @param payload 参数
* @param call 执行异步函数调用接口
* @param put 发出一个 Action,类似于 dispatch 将服务端返回的数据传递给上面的state
* @returns {IterableIterator<*>}
*/* fetch({ payload }, { call, put }) {
// 访问之前可以做一些操作
const response = yield call(queryUser1, payload);
// 拿到数据之后可以做一些操作
yield put({
// 这行对应下面的reducers处理函数名字
type: “save”,
// 这是将最后的处理数据传递给下面的reducers函数
payload: response
});
}
// * fetch2({ payload }, { call, put }) {
// const response = yield call(queryCurrent);
// yield put({
// type: “saveCurrentUser”,
// payload: response
// });
// }
},
reducers: {
/**
*
* @param state
* @param action
* @returns {{[p: string]: *}}
*/
save(state, action) {
console.log(action);
return {
…state, // es6三点运算符合,有点模糊解释不清楚
data: action.payload // 上面与服务器交互完的数据赋值给data,这里的data 对应最上面 state 里面的data
};
}
}
};
发表回复