1. 注冊(cè)model
在引入新頁(yè)面時(shí),新建model需要注冊(cè),這個(gè)時(shí)候需要在commen中的router頁(yè)面進(jìn)行注冊(cè)要销,否則無(wú)法使用dispatch進(jìn)行后續(xù)操作。
2.在ant-design-pro中解決跨域辦法
需要在配置文件中(.webpackrc)加入如下代碼
"proxy": {
"/api": {
"target": "http://xxx:xx/",
"changeOrigin": true,
"pathRewrite": { "^/api" : "" }
}
},
需要注意的是此處不是將/api/代理到正式請(qǐng)求/api/中夏块,(例如請(qǐng)求/api/users則會(huì)代理到http://xxx:xx/users)
如果需要多次代理且需要代理到不同的服務(wù)器則可以在配置文件中進(jìn)行如下配置
"proxy": {
"/test": {
"target": "http://xxx:xx/",
"changeOrigin": true,
"pathRewrite": { "^/test" : "" }
},
"/cross": {
"target": "http://jsonplaceholder.typicode.com",
"changeOrigin": true,
"pathRewrite": {"^/cross": ""}
} // 此處有一點(diǎn)需要注意疏咐,不能在最后一個(gè)代理對(duì)象后面加逗號(hào),否則會(huì)報(bào)錯(cuò)F旯;肴!
},
之所以不在pro中使用/api
進(jìn)行代理是因?yàn)閜ro中的其他接口是基于此的政己,所以如果對(duì)其進(jìn)行代理會(huì)導(dǎo)致頁(yè)面報(bào)錯(cuò)從而有可能誤導(dǎo)開(kāi)發(fā)人員酌壕。
3.權(quán)限控制
在pro里面權(quán)限控制是通過(guò)Authorized來(lái)進(jìn)行控制的,通過(guò)對(duì)本地存儲(chǔ)的antd-pro-authority的值進(jìn)行判斷,在登陸時(shí)進(jìn)行權(quán)限的刷新卵牍,所以要將權(quán)限控制精細(xì)到頁(yè)面元素級(jí)別的話需要通過(guò)對(duì)獲取到的值進(jìn)行判斷果港,在實(shí)際項(xiàng)目開(kāi)發(fā)過(guò)程中,有可能該值不會(huì)存儲(chǔ)在本地而是通過(guò)服務(wù)獲取到糊昙,以此來(lái)提高安全性京腥。
在pro中控制權(quán)限是通過(guò)角色來(lái)進(jìn)行控制的,不同的角色擁有不同的權(quán)限溅蛉,在src/router
中來(lái)對(duì)角色進(jìn)行權(quán)限的判定公浪。例如登陸頁(yè)面是guest,而內(nèi)容頁(yè)面則是admin和user船侧。新增角色也是在此處進(jìn)行添加欠气。
將權(quán)限控制精細(xì)到按鈕級(jí)別,示例代碼如下
import RenderAuthorized from 'ant-design-pro/lib/Authorized';
import { Alert } from 'antd';
const Authorized = RenderAuthorized('user');
const noMatch = <Alert message="No permission." type="error" showIcon />;
ReactDOM.render(
<Authorized authority={['user', 'admin']} noMatch={noMatch}>
<Alert message="Use Array as a parameter passed!" type="success" showIcon />
</Authorized>,
mountNode,
);
需注意的是引入的是組件而不是工具類(lèi)里的Authorized镜撩,兩者用法不同预柒。
4. 在model中怎么同時(shí)發(fā)起多次請(qǐng)求,因?yàn)閥ield將異步請(qǐng)求轉(zhuǎn)為同步請(qǐng)求了袁梗,所以請(qǐng)求會(huì)按照同步順序依次執(zhí)行宜鸯,使請(qǐng)求時(shí)間延長(zhǎng)
錯(cuò)誤寫(xiě)法
// effects將按順序執(zhí)行
const response = yield call(fetch, '/users');
const res = yield call(fetch, '/roles');
正確寫(xiě)法
// effects將會(huì)同步執(zhí)行
const [response, res] = yield [
call(fetch, '/users'),
call(fetch, '/roles'),
]