dva文档
immer 使用文档
### immer 作用
- 当我们调用 immer 的 API produce时,immer 将内部暂时存储着我们的目标对象(以 state 为例)
- immer 暴露一个 draft (草稿)给我们
- 我们在 draft 上作修改
- immer 接收修改后的draft,immer 基于传入的 state 照着draft 的修改 返回一个新的 state
###### immer 使用
this.setState((prevState) => {
return produce(prevState, draftState =>{
draftState.address.city.area = 'JingAn';
draftState.address.city.postcode = draftState.address.city.postcode + 10;
});
});
dva 注册
import dva from 'dva';
import './index.css';
const app = dva();
app.model(require('./models/network').default);
app.router(require('./router').default);
app.start('#root');
dva models
./models/network 文件
import request from '../utils/request';
import { produce } from 'immer';
export default {
namespace: 'network',
state: {
info: {
relationship: '同学',
},
list: [
{ name: '源', age: 26, city: '北京' },
],
articles: [],
},
subscriptions: {
setup({ dispatch, history }) {
},
},
effects: {
*getList({ value }, { call, put }) {
const res = yield call(request, value.url)
console.log(res.data.data.articles, 'km')
yield put({ type: 'save', value: res?.data?.data?.articles || [] });
},
},
reducers: {
save(state, action) {
return produce(state, draftState => {
draftState.articles = action.value;
})
},
add(state, action) {
return produce(state, draftState => {
draftState.list = [...draftState.list, action.value]
})
}
},
};
页面使用
import React, { useEffect } from 'react';
import { connect } from 'dva';
function IndexPage({ dispatch, network }) {
const addNeteork = () => {
dispatch({ type: 'network/add', value: { name: '婷', age: 24, city: '北京' } })
console.log(network, 'network')
}
useEffect(() => {
dispatch({ type: 'network/getList', value: { url: '' } })
}, [])
return (
<div>
<button onClick={addNeteork}>添加关系</button>
</div>
);
}
IndexPage.propTypes = {
};
export default connect(({ network }) => ({ network }))(IndexPage);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?