事件联动
如果 A 和 B 事件存在联动关系
- 可以在组件中先后发射 2 个事件
- 在 A 事件定义中触发 B
接口调用放在 view 层
mode 内处理数据操作逻辑,同步的
配合 umi-request,接口调用尽量放在 view 层使用
useUpdateEffect 可以在组件 mounted 后的更新阶段执行
不要在 useModel 里面 selector
遵循 MVC,model 和 model 之间少一些交互,交给 hooks(controller)
在状态定义的位置,去编写该状态的副作用,不要反其道而行之,特意 依赖一个没有使用到的外部状态,只是为了用其副作用
不用直接定义 衍生状态,而是通过其他状态进行设置
import { StageComponentsModelItem } from '@/models/stageComponentsModel';
import { useModel } from '@umijs/max';
import { useEffect, useState } from 'react';
const useSelectNodeMeta = () => {
const [selectNodeMeta, setSelectNodeMeta] =
useState<StageComponentsModelItem>();
const [selectNodeId, setSelectNodeId] = useState<string>();
const { stageComponentsModel } = useModel(
'stageComponentsModel',
(model) => ({
stageComponentsModel: model.stageComponentsModel,
}),
);
useEffect(() => {
if (selectNodeId) {
setSelectNodeMeta(stageComponentsModel?.[selectNodeId]);
} else {
setSelectNodeMeta(undefined);
}
}, [selectNodeId]);
return {
selectNodeId,
selectNodeMeta,
setSelectNodeId,
};
};
export default useSelectNodeMeta;